【发布时间】:2017-01-22 06:41:59
【问题描述】:
我看到这个javascript sn-p/问题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”是您可以将两个数字相加的最小值。接下来,
var rest = Math.floor(number / 10);
145 除以 10 是 14.5。 Math.floor 会将其向下舍入为 14。因此,rest = 14。接下来,
sum += sumDigits(rest);
因为余数是 14,这意味着 sumDigits 是 14。所以,因为和是 5,所以它把自己加到余数中。也就是说,总和 = 5 + 14。总而言之,总和是 19。
这就是为什么它让我感到困惑,因为当 145 = 1 + 4 + 5 = 10 时它不会相加。换句话说,总和应该是 10,而不是 19?!?!?????
【问题讨论】:
-
阅读递归——这就是这个函数的“重点”——en.wikipedia.org/wiki/Recursion_(computer_science)
-
既然 rest 是 14,那意味着 sumDigits 是 14 不,因为
rest是14,那意味着sumDigits(14)是5。跨度>
标签: javascript