0

我需要使用递归来查找字符串中元音的数量。所以如果hello输入我希望它返回2

我遇到的问题是转到字符串中的下一个字符。

 def recVowelCount(i):
    count = 0
    if i in 'aeiou':
        count +=1
        reVowelCount(i)
    else:
        reVowelCount(i)
        return count
4

4 回答 4

4

这是使用递归的一种方法:)

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:])
于 2012-10-08T04:30:28.493 回答
2
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 个基本步骤:

  1. 基本情况
  2. 你需要朝着基本情况前进
  3. 递归调用
于 2012-10-08T04:31:05.943 回答
1

首先,不清楚您传递 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:])
于 2012-10-08T04:32:52.897 回答
0
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返回。

这称为尾递归:http ://en.wikipedia.org/wiki/Tail_call

于 2012-10-08T04:47:50.513 回答