有人可以解释原因:
def sum_digits(n): 如果n // 10 == 0:返回n else:return sum_digits(n // 10)+ n%10
打印(sum_digits(137))
返回11,当我用+替换+时,它返回1而不是21。
答案 0 :(得分:0)
要清楚地找到我们需要的137
数字的总和,请1 + 3 + 7
。递归使用的技巧是在递归的每个阶段对数字的mod 10求和。为了更直观地解释:
input | input % 10 | remarks
137 | 7 | call sum_digits(13)
13 | 3 | call sum_digits(1)
1 | 1 | return 1, do not make more recursive calls
total | 11
当进行每次递归调用时,我们将输入数字除以10.这将删除已经求和的十位数字,并将剩余数字向右移一。当我们点击小于10的数字时,递归结束,我们不会再调用sum_digits
。