我看到了这个javascript代码段/问题here最好的答案是
function sumDigits(number) {
var remainder = number % 10;
var sum = remainder;
if(number >= 10) {
var rest = Math.floor(number / 10);
sum += sumDigits(rest);
}
return sum;
}
我试图了解它的工作原理。我可以理解一些线路,但它令人困惑。
我能理解的是
var remainder = number % 10;
var sum = remainder;
返回该数字的剩余部分。换句话说,如果数字是145并且它除以10,则余数为5.因此,总和为5.接下来,
if(number >= 10) {
这个数字必须大于或等于10,因为你不能单独加一个数字,因此' 10' 10是您可以将两位数加在一起的最小值。接着,
var rest = Math.floor(number / 10);
145除以10是14.5。 Math.floor会将其四舍五入为14.因此,rest = 14.接下来,
sum += sumDigits(rest);
由于rest为14,这意味着sumDigits为14.因此,总和为5,它将自己添加到其余部分。换句话说,sum = 5 + 14.总之,总和是19.
这就是为什么它让我感到困惑,因为当145 = 1 + 4 + 5 = 10时它并没有加起来。换句话说,总和应该是10,而不是19? !?!?????
答案 0 :(得分:4)
让我为你分解一下:
sumDigits(145)
5 + sumDigits(14)
5 + 4 + sumDigits(1)
5 + 4 + 1 => 10
添加括号,显示其实际工作原理:
sumDigits(145)
5 + sumDigits(14)
5 + (4 + sumDigits(1))
5 + (4 + 1)
5 + 5 => 10
实际上,中间结果可以打印出来。
function sumDigits(number) {
var temp;
var remainder = number % 10;
var sum = remainder;
if (number >= 10) {
var rest = Math.floor(number / 10);
console.log(sum + " + sumDigits(" + rest + ")");
temp = sumDigits(rest);
console.log(sum + " + " + temp);
sum += temp;
}
return sum;
}
console.log(sumDigits(145));
答案 1 :(得分:1)
这个功能正常运作。
一旦你最终得到19,它会在同一个函数中再次运行,因为19大于10.所以1 + 9将等于10.
答案 2 :(得分:0)
我认为这里的关键是
由于休息是14,这意味着sumDigits是14。
如果您只运行NSView
,则会将NSOpenGLLayer
和sumDigit(14)
= 1
相加。
然后4
被添加到5
5
当我想到这一点时,我对它进行了重构,这有助于我理解发生了什么。以下是另一种思考方式:
5