为什么返回的值在我的递归函数中未定义?

时间:2018-04-06 06:02:49

标签: javascript

我写了这个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

1 个答案:

答案 0 :(得分:1)

return numbers[0];不会返回undefined,它会返回正确的值( 15 在您的情况下)。

但是,您的递归函数不会向console.log返回任何内容,使其成为

return sum.apply(null, [summedValue].concat(restNumbers))

<强>演示

&#13;
&#13;
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;
&#13;
&#13;