我有一个有效的代码但是我不完全理解这条线是如何工作的:
return (myFunc%10) + numbersum(myFunc//10)
为什么这一行计算数字的总和?
这是完整的代码
def numbersum(myFunc):
if myFunc == 0:
return 0
else:
return (myFunc%10) + numbersum(myFunc//10)
非常感谢任何帮助。
答案 0 :(得分:3)
由于你没有指明,我不确定你不理解哪一行,但我会假设它是以下之一:
(1)很容易用Google搜索,并且有很多很好的解释(例如,Wikipedia article here中的第一行):“在计算中,模运算在一个数字除以另一个数字之后找到余数(有时也被称为模数。“
(2)有关//运算符的解释,请参阅this stack overflow post。
(3)调用自身的函数就像递归一样,该函数被称为“递归函数”。递归函数的一个关键组件是“基本情况”,即函数不调用自身的情况。如果没有基本情况,调用函数会进入无限循环,函数会自动调用它。此代码中的if语句定义了一个基本案例。
在递归调用中,递归中的一个常见模式是向函数传递一个比它收到的参数“更简单”的参数(因为它“更接近”基本情况)。
让我们来看一个简单的例子吧。如果我拨打numbersum(123)
:
123 == 0
? 否即可。因此,numbersum(123)
等于123%10
,即3 {加上numbersum(123//10)
,即numbersum(12)
。numbersum(12)
。同样的步骤。是12==0
吗? 否即可。因此,numbersum(12)
等于12%10
,即2 {加上numbersum(12//10)
,即numbersum(1)
。numbersum(1)
是什么?同样的步骤。是1==0
吗? 否即可。因此,numbersum(1)
等于1%%10
,即0 {加上numbersum(1//10)
,即numbersum(0)
。numbersum(0)
是什么?是0==0
吗? 是!基本情况在这里打。所以numbersum(0)
等于0。如果您回头看看这些步骤,您会看到
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%10
会3
因为123%10 == 3
而导致myFunc//10
,那么您12
这会让你3
。你将它传递给你的函数,这是递归发生的地方。因此,您最终会得到12
+ var client = net.connect({port: 4567, allowHalfOpen: true},function() {
//etc
};
上调用函数的结果。重复此操作直到您将所有数字相加。