你在学js吧..感觉各种东西都有 代码写的比较神奇
js中假如不指定返回值就会返回undefined
举一个很简单的例子
function t(i){ if(i==0){ return 0 } t(i-1) } console.log(t(1))
function t(i){
if(i==0){
return 0
}
t(i-1)
}
console.log(t(1))
你觉得会输出0对吧?
但是为什么却是undefined呢
因为虽然最内层的调用返回了0 但是到外面一层也就是 t(1) 时却什么也不返回
应该被返回的0直接就被丢掉了
return确实是终止了函数 但是结束的是t(0) 而不是t(1)
递归调用 每一层都是一个"新"的函数在执行 需要一层层返回 而不会一下子回到最外层
var runningSum = function (nums, list = [], i = 0, ) { if (i == 0) { //list.push(nums[i]) return runningSum(nums, list, i+=1) } else { list.push(george(nums,i) ) if (i == nums.length) { return list } } return runningSum(nums, list, i+=1) }; function george(nums,i,sum = 0,b = i) { if (b == 0) { return sum } if (b <= nums.length){ sum += nums[i-=1] } return george(nums,i,sum) } var temp = runningSum([1, 2, 3, 4, 5]) console.log(temp)
var runningSum = function (nums, list = [], i = 0, ) {
if (i == 0) {
//list.push(nums[i])
return runningSum(nums, list, i+=1)
} else {
list.push(george(nums,i) )
if (i == nums.length) {
return list
}
}
return runningSum(nums, list, i+=1)
};
function george(nums,i,sum = 0,b = i) {
if (b == 0) {
return sum
}
if (b <= nums.length){
sum += nums[i-=1]
}
return george(nums,i,sum)
}
var temp = runningSum([1, 2, 3, 4, 5])
console.log(temp)
小改了你的代码
加了一些 return以确保返回值的传递
注释的那行是多余的 因为重复输出了
20行改成了 <= 不然就炸了
|