我写了这个sum函数来习惯编写递归函数。
我认为当我完成写作时它会起作用,但最终的总和值变得不确定。
此函数中没有异步部分,但此函数的返回值变为未定义,我不明白为什么......
我做错了什么?
有谁能告诉我如何解决这个问题?
谢谢!
function sum() {
var numbers = [...arguments];
if (numbers.length === 0) {
return 0;
}
if (numbers.length === 1) {
// it shows 15 here!!
console.log(numbers[0])
// But it returns undefined... Why!?
return numbers[0];
}
var summedValue = numbers[0] + numbers[1];
var restNumbers = numbers.slice(2);
sum(summedValue, ...restNumbers)
}
console.log(sum(1, 2, 3, 4, 5)) //undefined
答案 0 :(得分:1)
return numbers[0];
不会返回undefined
,它会返回正确的值( 15 在您的情况下)。
但是,您的递归函数不会向console.log
返回任何内容,使其成为
return sum.apply(null, [summedValue].concat(restNumbers))
<强>演示强>
function sum() {
var numbers = Array.from(arguments);
if (numbers.length === 0) {
return 0;
}
if (numbers.length === 1) {
// it shows 15 here!!
console.log(numbers)
// But it returns undefined... Why!?
return numbers[0];
}
var summedValue = numbers[0] + numbers[1];
var restNumbers = numbers.slice(2);
return sum.apply(null, [summedValue].concat(restNumbers))
}
console.log(sum(1, 2, 3, 4, 5)) //undefined
&#13;