代码之家  ›  专栏  ›  技术社区  ›  Stanleyrr

无法理解这个递归函数

  •  0
  • Stanleyrr  · 技术社区  · 6 年前

    我在一个教程站点上回顾递归的主题,遇到了以下问题和解决方案:

    解决方案:

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

    我知道“if n<10”是基本情况—如果n是个位数,那么就返回n。我无法理解的是“n%10+sum_func(int(n/10))”这行代码。假设n是235,n%10等于5,int(n/10)等于23。最终5+23将变成28而不是10。

    2 回复  |  直到 6 年前
        1
  •  2
  •   David Waterworth    6 年前

    %是 modulus

    int(n/10)由于int()函数向下舍入-235->23,所以会舍去最后一个数字

    现在你似乎被内心所迷惑 sum_func 和函数

    i、 你有

    sum_func(235)
    =5 + sum_func(23)
    =5 + (3 + sum_func(2))
    =5 + (3 + (2))
    =10
    
        2
  •  3
  •   Samuel Muldoon    6 年前

    如果 n = 235 然后 int(n/10) 23 加上5和23。你补充道 sum_func(int(n/10)) 5

    和函数(int(n/10)) 不是 内景(n/10)

    和函数(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