使用递归函数计算数字之和。谁能解释一下?

时间:2016-11-02 17:30:53

标签: python string function recursion

我有一个有效的代码但是我不完全理解这条线是如何工作的:

return (myFunc%10) + numbersum(myFunc//10)

为什么这一行计算数字的总和?

这是完整的代码

def numbersum(myFunc):
    if myFunc == 0:
        return 0
    else:
        return (myFunc%10) + numbersum(myFunc//10)

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

由于你没有指明,我不确定你不理解哪一行,但我会假设它是以下之一:

  1. modulo operator(%);
  2. 整数除法运算符(//);或
  3. 递归
  4. (1)很容易用Google搜索,并且有很多很好的解释(例如,Wikipedia article here中的第一行):“在计算中,模运算在一个数字除以另一个数字之后找到余数(有时也被称为模数。“

    (2)有关//运算符的解释,请参阅this stack overflow post

    (3)调用自身的函数就像递归一样,该函数被称为“递归函数”。递归函数的一个关键组件是“基本情况”,即函数调用自身的情况。如果没有基本情况,调用函数会进入无限循环,函数会自动调用它。此代码中的if语句定义了一个基本案例。

    在递归调用中,递归中的一个常见模式是向函数传递一个比它收到的参数“更简单”的参数(因为它“更接近”基本情况)。

    让我们来看一个简单的例子吧。如果我拨打numbersum(123)

    1. 123 == 0即可。因此,numbersum(123)等于123%10,即3 {加上numbersum(123//10),即numbersum(12)
    2. 现在我们必须找出numbersum(12)。同样的步骤。是12==0吗? 即可。因此,numbersum(12)等于12%10,即2 {加上numbersum(12//10),即numbersum(1)
    3. 那么numbersum(1)是什么?同样的步骤。是1==0吗? 即可。因此,numbersum(1)等于1%%10,即0 {加上numbersum(1//10),即numbersum(0)
    4. 最后,numbersum(0)是什么?是0==0吗? !基本情况在这里打。所以numbersum(0)等于0。
    5. 如果您回头看看这些步骤,您会看到

      numbersum(123) = 3 + numbersum(12) numbersum(12) = 2 + numbersum(1) numbersum(1) = 1 + numbersum(0) numbersum(0) = 0

      使用基本的代数替换来帮助你回归链条,得到正确的答案:6。

答案 1 :(得分:0)

  • (myFunc%10) mod 10 - 取一个数字
  • numbersum(myFunc//10)以递归方式调用函数,将数字除以10,因此“切断”个位数。
  • 直到... myFunc == 0(确实应该是<=),在这种情况下返回0,从“向上堆栈”调用中添加到前一个数字< / LI>
  • 所有数字总结回调用堆栈,直到您添加了所有数字

答案 2 :(得分:0)

如果您在123中存储了myFunc号码,那么myFunc%103因为123%10 == 3而导致myFunc//10,那么您12这会让你3。你将它传递给你的函数,这是递归发生的地方。因此,您最终会得到12 + var client = net.connect({port: 4567, allowHalfOpen: true},function() { //etc }; 上调用函数的结果。重复此操作直到您将所有数字相加。