使用递归函数:RecursionError:获取对象的str时超过了最大递归深度


def sum_digits(n):
if n < 0:
raise ValueError("The number must be higher or equal to 0")

num = sum([int(i) for i in str(n)])

if str(num) == 1:
return num
else:
return sum_digits(num)

如果我尝试print(sum_digits(854)),我会得到以下错误:

RecursionError: maximum recursion depth exceeded while getting the str of an object

我试着进入那个代码,但对我来说,那个代码是完全合法的。那个代码怎么了?

您的代码总是计算为False,并递归调用函数。

>>> n = 1
>>> str(n) == 1
False

将其更改为

if num == 1:
return num
else:
return sum_digits(num)

这从来都不是真的:

str(num) == 1

为什么不只是

num == 1

但它仍然不起作用。如果您使用4输入,它将保持4,并且永远不会得到一个。也许使条件num < 10。。。这取决于你想要实现的目标。

以下是该代码的其他一些方法。第一,迭代风格:

def sum_digits(n_in):
n_out = 0
for s_chr in str(n_in):
n_out += int(s_chr)
return n_out
n = sum_digits(854)
print(n)

然后功能风格:

from functools import reduce
n_sum = reduce(lambda n_ca, s_it: n_ca + int(s_it), str(854), 0)
print(n)

最新更新