我需要使用递归来查找字符串中元音的数量。所以如果hello
输入我希望它返回2
。
我遇到的问题是转到字符串中的下一个字符。
def recVowelCount(i):
count = 0
if i in 'aeiou':
count +=1
reVowelCount(i)
else:
reVowelCount(i)
return count
这是使用递归的一种方法:)
def recVowelCount(i, chars_to_find='aeiou'):
if not chars_to_find:
return 0
return i.count(chars_to_find[0]) + recVowelCount(i, chars_to_find[1:])
现在,您的代码中的问题是
if i in 'aeiou':
会问if 'hello' in 'aeiou':
,这不是很有用。if i[0] in 'aeiou'
您需要检查每次递归调用函数时的i[0]
每个字母的位置"hello"
从简单的案例开始。如果输入字符串为空会发生什么?你会回来0
的吧?
def recVowelCount(i):
if not i:
return 0
这样我们就完成了一半。现在您需要考虑在i
不为空的情况下会发生什么。如果第一个字符是元音,我们将计数1
,然后将字符串的其余部分递归地传递给函数
def recVowelCount(i):
if not i:
return 0
if i[0] in 'aeiou':
count = 1
else:
count = 0
return count + recVowelCount(i[1:])
好的..可以稍微重构一下
def recVowelCount(i):
if not i:
return 0
count = 'aeiou'.count(i[0])
return count + recVowelCount(i[1:])
最后
def recVowelCount(i):
if not i:
return 0
return 'aeiou'.count(i[0]) + recVowelCount(i[1:])
def recVowelCount(s):
''' Return number of vowels in string s'''
if len(s) == 0:
return 0
letter = s[0]
if letter in 'aeiou':
return 1 + recVowelCount(s[1:])
return recVowelCount(s[1:])
print recVowelCount('hello')
任何递归程序都有 3 个基本步骤:
首先,不清楚您传递
def countVowels(my_string):
的参数可能是更好的开始方式
接下来你需要一个基本案例
if len(my_string) == 1:
if my_string in "aeiou": return 1
else:return 0
那么你需要你的递归
elif my_string[0] in "aeiou":
return 1 + countVowels(my_string[1:])
else:
return 0 + countVowels(my_string[1:])
def find_vowels(word=None, count=0):
if word:
if word[0] in ('A','E','I','O','U','a','e','i','o','u'):
count += 1
return find_vowels(word=word[1:], count=count)
else:
return count
find_vowels('python is awesome')
find_vowels
函数有两个参数——一个是word
要查找的实际字符串。另一个是count
,它包含元音的总出现次数。的初始值count
设置为 0。
如果word
为空,函数将返回计数值。这是word
完全检查元音的时候。
if word:
以下块包含实际逻辑。第一个字符被重复签入word
。如果它是元音,count
则自变量递增。
return find_vowels(word=word[1:], count=count)
是递归发生的地方。使用word=word[1:]
我们对第一个字符进行切片,因为它已被检查。
示例:
让word ='Python'
这word
在后续调用中的价值如何:
Python
- 第 1 次通话
ython
- 第 2 次通话- 第 3 次
thon
通话- 第
hon
4 次通话
on
- 第 5 次通话
n
- 第 6 次通话
- 最后通话(空)
最后当字符串为空时,count
返回。