def final_sum(n):
n = str(n)
if int(n) == 0:
return 0
else:
x = int(n[0])
return x + int(final_sum(n[1:]))
print(final_sum(123))
例如,如果我的n为123,则我应该为6。但是此代码中有错误。有人可以帮忙吗?我必须使用递归函数。所以告诉我代码有什么问题。
答案 0 :(得分:0)
首先,在开始时我会这样做,而不是来回投掷:
def final_sum(n):
if n<10:
return n
您看到的问题是,在最后的递归迭代中,您正在将其传递给函数:
final_sum("")
何时应该传递一个int值。我认为发生这种情况是因为您的上次转换是倒数,并且您从未检查过该数字有多少位。因此,代码应如下所示:
def final_sum(n):
if n<10:
return n
n = str(n)
x = int(n[0])
return x + final_sum(int(n[1:]))
print(final_sum(123))
答案 1 :(得分:0)
在return x + int(final_sum(n[1:]))
中,n[1:]
是str
类型
在函数的开头,使用n = str(n)
,您假设输入是int
此外,您没有考虑n[1:]
中return x + int(final_sum(n[1:]))
可以为空的情况。
这是基于您的代码的答案
def final_sum(n):
if n == 0:
return 0
n = str(n)
x = int(n[0])
if len(n)==1:
return x
else:
return x + final_sum(int(n[1:]))
这里是使用%
操作的另一个版本
def final_sum(n):
if n < 10:
return n
return n % 10 + final_sum(n // 10)