2017-02-21 40 views
1

为什么这个函数返回undefined?我已经看到了更干净和更好的方法来做到这一点,我知道修改一个这样的数组通常是不好的做法。尽管如此,我不清楚为什么这个例子没有返回15.我已经疯狂地登录了控制台。预先感谢您的禅宗般的新手容忍。简单的递归基函数

的步骤如下我看到他们:

  • 通行证在阵列中并给予缺省值为0
  • 阵列值被弹出没有第二个参数,这被添加到总
  • 递归调用传递新缩短阵列以及当前总数。
  • 当数组的长度等于零时,退出条件得到满足并返回总数。

var sumOfArray = function(array, total = 0) { 
 
    var temp = 0; 
 

 
    // base case 
 
    if (array.length == 0) { 
 
    return total; 
 
    } 
 

 
    temp += array.pop(); 
 
    total += temp; 
 

 
    sumOfArray(array, total); 
 
}; 
 

 

 
console.log('sumOfArray([1, 2, 3, 4, 5]=' + sumOfArray([1, 2, 3, 4, 5]));

+0

你应该*返回递归调用的返回值,否则你不返回任何东西(=未定义)。 – trincot

+0

当然是,谢谢! – adamb

回答

1

嗨,哥们大多是代码的一切是正确的。你只是在else块和其他一些小事情中错过了一个return语句;我们都去过那儿。

var sumOfArray = function(array, total=0) { 
    var temp = 0; 
    if (array.length === 0) { 
    return total; 
    } else { 
    temp += array.pop(); 
    total += temp; 
    return sumOfArray(array, total); 
    } 
} 

sumOfArray([1,2,3,4,5]) 
+0

有趣现在看起来很明显......谢谢! – adamb