所以我需要计算给定值在字符串中出现的次数,例如“ hello world”,“ o”,但是我的最大深度已被超出...我也应该避免递归执行
def count(s, token) : #OUT OF RANGE
if len(s) == 1 and s[0] == token :
return 1 + count(s[1:], token)
#return s[0]
else :
return count(s[1:],token)
我主要是
print(count('hello world' , 'o'))
答案 0 :(得分:1)
if
和else
都导致另一个递归调用,这意味着该函数无法停止自身的调用。对于程序员学习递归来说,这是一个非常常见的错误。
您的函数需要某种条件,它不能不再进一步调用自身,而只是返回一些值以防止无限递归。也许如果字符串为空,则可以返回零。
正如其他人所说的那样,将其作为递归函数实际上并没有任何好处,除非作为学习练习。一个简单的循环会更好,并且使用内置字符串.count()
函数会更好。
答案 1 :(得分:0)
根据this的答案,您正在寻找str.count()
,无需使您自己拥有已内置的功能! 感谢Python <3
print('hello world'.count('o'))
#2
答案 2 :(得分:0)
您将希望在保持计数的同时循环浏览字母。
def count(s, token) : #OUT OF RANGE
count = 0
for i in range(len(s)):
if s[i] == token : count += 1
return count
print(count('Hello, World' , 'o'))
答案 3 :(得分:0)
使用python的内置函数'count'
sentence = "Hello world!"
sentence.count('o')
这将为您提供结果。
答案 4 :(得分:0)
您的基本情况不正确,因为如果len(s) == 1 and s != token
您将再次递归但条件为len(s) == 0
,而您没有终止条件。
因此,len(s) <= 1
结束时,无论什么情况,您都需要终止。您还需要合并递归调用的结果。
固定版本可能类似于以下内容:
def count(s, token):
if len(s) <= 1:
return 1 if s == token else 0
return count(s[0], token) + count(s[1:], token)
print(count('hello world' , 'o')) # 2
答案 5 :(得分:0)
尽管许多答案都解决了代码中的缺陷,但我认为他们的示例解决方案并不符合您要实现的目标。您拥有大部分零件,但我会:选择单点收益;由于您标记了此[python-3.x],因此请充分利用Python 3语法;认为这是一个通用序列,而不是一个字符串:
def count(sequence, token):
token_count = 0
if sequence:
head, *tail = sequence
if head == token:
token_count += 1
token_count += count(tail, token)
return token_count
用法
>>> print(count('hello world', 'o'))
2
>>> print(count(['e', 'l', 'e', 'p', 'h', 'a', 'n', 't'], 'e'))
2
>>>