无法理解此递归功能

时间:2019-11-06 03:47:13

标签: python recursion

我正在教程站点中回顾递归的主题,并遇到以下问题和解决方案:

问题:

给出一个整数,创建一个函数,该函数返回该整数中所有单个数字的总和。例如:如果n = 4321,则返回10,因为4 + 3 + 2 + 1 = 10。

解决方案:

def sum_func(n):
    if n<10:
        return n
    else:
        return n%10 + sum_func(int(n/10))
    pass

我理解“如果n <10”是基本情况-如果n是一位数字,则只需返回n。我无法解决的是代码的“ n%10 + sum_func(int(n / 10))”行。假设n为235,n%10等于5,int(n / 10)等于23。那么最终5 + 23将变为28而不是10。

有人可以帮助我了解“ n%10 + sum_func(int(n / 10))”是做什么的吗?如果您一次可以遍历逻辑一行,将不胜感激!

2 个答案:

答案 0 :(得分:3)

如果n = 235,则int(n/10)23。但是,您确实 添加5和23。您添加了sum_func(int(n/10))5

sum_func(int(n/10))不是int(n/10)

sum_func(int(n/10))将数字“ 23”中的数字加在一起。

因此,sum_func(int(n/10)) == 2 + 3 == 5

sum_func(235) == sum_func(235)
              == sum_func(23)    + 5
              == sum_func(2) + 3 + 5
              == 2           + 3 + 5

答案 1 :(得分:2)

正如您所说的,如果只有1位数字,请返回它。

%是modulus运算符-即除以10的余数或仅是最后一位数字(即235%10 = 5)

int(n / 10)丢弃自int()函数向下舍入后的最后一位数字-即235-> 23

现在,您似乎感到困惑的是在sum_func中,一旦删除了最后一位,即再次调用sum_func,剩下的数字即23(这是递归部分)将返回5

即你有

sum_func(235)
=5 + sum_func(23)
=5 + (3 + sum_func(2))
=5 + (3 + (2))
=10