gpt4 book ai didi

python - 递归python脚本

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:28 26 4
gpt4 key购买 nike

found = 0
def new(string):
global found

if found > len(string):
return 0

fish = string.find('x',found,len(string))
found = fish + 1

return new(string) + 1


text = 'onxonxoinxoinoxn'
final_text = text + 'x'
print new(final_text)

所以我是递归的新手,我知道有一种更简单的方法可以做到这一点,但有人可以解释如何解决这个问题。这基本上是一个递归函数,用于查找字母“x”可以出现的总次数在变量“文本”中找到。

This is my error:
4
7
11
16
18
0
4
7
Traceback (most recent call last):
11
16
File "/Users/Charana/Documents/Projects/untitled/Main.py", line 18,

在 新(最终文本) RuntimeError: 超出最大递归深度

所以它有效但它继续循环。我如何让它停止提前谢谢你

最佳答案

found > len(string)

这个条件永远不会成立,因为 str.find 总是会返回一个结果 < len(s) .

当没有结果时要检查的正确返回值是 -1 .但是你需要小心增量,因为这会改变无效结果 -10继续循环。所以你应该稍微重新排序你的逻辑:

def new(string):
global found

fish = string.find('x',found,len(string))
if fish < 0:
return 0

found = fish + 1
return new(string) + 1

请注意,为这样的函数使用全局变量,尤其是对于递归函数,不是一个好主意。您无法完全控制它,相反,您还需要确保在调用该函数时重置它的值。相反,您应该将所有信息保留在内部,并在必要时将其传递给递归调用。你可以这样改变你的功能:

def new (string, found = 0):
fish = string.find('x', found)
if fish < 0:
return 0
return new(string, fish + 1) + 1

这使用默认参数值来确保 found从 0 开始。对于递归调用,它只是传递新的 found。值,以便下一个功能可以从那里开始。

最后请注意,您应该尝试为您的函数和变量使用描述性名称。该函数应该计算 'x' 的出现次数, 所以也许 count_x会更好。此外,变量 found在这种情况下传达的意思是它包含 x 的出现次数你已经找到了;相反,它是继续搜索的起始偏移量;和 fish很糟糕,因为它只是下一个 'x' 的索引:

def count_x (string, offset = 0):
index = string.find('x', offset)
if index < 0:
return 0
return count_x(string, index + 1) + 1

最后,以防万一你不知道,还有一个内置函数 str.count 它做同样的事情:)

关于python - 递归python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32391740/

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