python递归困难

时间:2018-01-03 08:50:28

标签: recursion

有人可以解释原因:

def sum_digits(n):     如果n // 10 == 0:返回n     else:return sum_digits(n // 10)+ n%10

打印(sum_digits(137))

返回11,当我用+替换+时,它返回1而不是21。

1 个答案:

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