gpt4 book ai didi

python - 使用递归计算字符串中的元音

转载 作者:行者123 更新时间:2023-11-28 19:57:47 25 4
gpt4 key购买 nike

我知道递归是指函数调用自身,但是我无法弄清楚如何让我的函数调用自身以获得所需的结果。我需要简单地计算提供给函数的字符串中的元音。

def recVowelCount(s):
'return the number of vowels in s using a recursive computation'
vowelcount = 0
vowels = "aEiou".lower()
if s[0] in vowels:
vowelcount += 1
else:
???

我最终想到了这个,感谢这里的一些见解。

def recVowelCount(s):
'return the number of vowels in s using a recursive computation'
vowels = "aeiouAEIOU"
if s == "":
return 0
elif s[0] in vowels:
return 1 + recVowelCount(s[1:])
else:
return 0 + recVowelCount(s[1:])

最佳答案

试试这个,这是一个简单的解决方案:

def recVowelCount(s):
if not s:
return 0
return (1 if s[0] in 'aeiouAEIOU' else 0) + recVowelCount(s[1:])

它考虑了元音是大写还是小写的情况。它可能不是递归遍历字符串的最有效方法(因为每次递归调用都会创建一个新的切片字符串)但它很容易理解:

  • 基本情况:如果字符串为空,则它的元音为零。
  • 递归步骤:如果第一个字符是元音,则在解决方案中加 1,否则加 0。无论哪种方式,通过删除第一个字符并继续遍历字符串的其余部分来推进递归。

第二步最终将字符串减少到零长度,从而结束递归。或者,可以使用 tail recursion 实现相同的过程。 - 考虑到 CPython 没有实现 tail recursion elimination,这对性能没有任何影响。 .

def recVowelCount(s):
def loop(s, acc):
if not s:
return acc
return loop(s[1:], (1 if s[0] in 'aeiouAEIOU' else 0) + acc)
loop(s, 0)

只是为了好玩,如果我们取消解决方案必须递归的限制,这就是我解决它的方式:

def iterVowelCount(s):
vowels = frozenset('aeiouAEIOU')
return sum(1 for c in s if c in vowels)

不管怎样,这是可行的:

recVowelCount('murcielago')
> 5

iterVowelCount('murcielago')
> 5

关于python - 使用递归计算字符串中的元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com