| 赞 | 87 |
| VIP | |
| 好人卡 | |
| 积分 | 136 |
| 经验 | |
| 最后登录 | 2021-1-24 |
| 在线时间 | 2753 小时 |
- 梦石
- 0
- 星屑
- 13562
- 在线时间
- 2753 小时
- 注册时间
- 2014-10-4
- 回帖
- 705

|
发表于 2020-9-22 01:13:11
|
显示全部楼层
你在学js吧..感觉各种东西都有 代码写的比较神奇
js中假如不指定返回值就会返回undefined
举一个很简单的例子
[pre lang="javascript"]function t(i){
if(i==0){
return 0
}
t(i-1)
}
console.log(t(1))
[/pre]
你觉得会输出0对吧?
但是为什么却是undefined呢
因为虽然最内层的调用返回了0 但是到外面一层也就是 t(1) 时却什么也不返回
应该被返回的0直接就被丢掉了
return确实是终止了函数 但是结束的是t(0) 而不是t(1)
递归调用 每一层都是一个"新"的函数在执行 需要一层层返回 而不会一下子回到最外层
[pre lang="javascript"]var runningSum = function (nums, list = [], i = 0, ) {
if (i == 0) {
//list.push(nums)
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)
[/pre]
小改了你的代码
加了一些 return以确保返回值的传递
注释的那行是多余的 因为重复输出了
20行改成了 <= 不然就炸了
|
|