我想通过递归返回n中所有索引的和。我该怎么做呢?

时间:2020-06-22 11:16:15

标签: python-3.x

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。但是此代码中有错误。有人可以帮忙吗?我必须使用递归函数。所以告诉我代码有什么问题。

2 个答案:

答案 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)