Javascript JS中的递归函数问题

Javascript JS中的递归函数问题,javascript,recursion,Javascript,Recursion,所以我需要严格使用递归来解决这个问题 //2。计算整数数组的和。 //总和([1,2,3,4,5,6]);//21您的代码的问题是您处理值的方式不对,应该是这样的 return sum(array.slice(0,array.length-1)) + array.pop(); 事实上,由于array.pop()删除了元素,因此您可以这样做: return array.pop() + sum(array); 当array.length==0时,还需要返回0,否则求和将失败 if (array

所以我需要严格使用递归来解决这个问题

//2。计算整数数组的和。

//总和([1,2,3,4,5,6]);//21
您的代码的问题是您处理值的方式不对,应该是这样的

return sum(array.slice(0,array.length-1)) + array.pop();
事实上,由于
array.pop()
删除了元素,因此您可以这样做:

return array.pop() + sum(array);
array.length==0
时,还需要返回
0
,否则求和将失败

if (array.length===0) return 0;
但是,使用
reduce
执行此操作要简单得多:

设arr=[1,2,3,4,5,6];

log(arr.reduce((t,v)=>{return t+v;},0))递归求和函数:

const sum = list => {
  if (!list.length) return 0;
  return list.pop() + sum(list);
};
因为
.pop
会变异数组,所以不需要使用slice。对于非破坏性版本(不改变原始阵列):


如果查看返回值,您将看到始终返回一个数组。当您想要一个数字作为最终结果时,这不可能是正确的。当
array.length==0时
可以安全地返回0,因为这与空数组相同。这就是你的边缘条件。之后,你只需要一个元素加上其余元素的和

当数组长度为零时,也可以返回数组长度,这是一个非常简洁的解决方案<代码>&
如果左元素为false(如0),则返回左元素,否则返回第二个元素:

var sum=(数组)=>array.length&&array.pop()+sum(数组)

控制台日志(总和([1,2,3,4,5,6])
使用显式
空的
和纯表达式的另一种编码

const empty=x=>
x==空
常量和=([x=空,…剩余])=>
空(x)
? 0
:x+总和(剩余)
console.log
(和([1,2,3,4,5])//15
,sum([])//0

)
当使用
array.pop()
作为参数递归时,您将传递一个数字数组,而不是数组。数字没有切片方法。除了您的解决方案之外,最好的建议是返回array.pop()+sum(array);正在返回Strings感谢您的回答!实际上,你在流行音乐中是对的!:)问题在于,它实际上返回的不是一个求和的结果,而是另一个具有相同数字的数组(向后或规则),但始终在一起,而不是作为分离的元素。我需要答案是21…:(我(再次)编辑过)包括当数组为空时必须返回0,而不是
array
你Jared和Mark的超级疯狂优雅解决方案!谢谢!我现在是初学者,但我希望有一天我能达到你的水平!谢谢!@Adolf关心优雅是上路的第一步。安全旅行!你Jared和Mark的超级疯狂优雅解决方案!谢谢!我现在是初学者,但我希望有一天我能达到你的水平!谢谢!
const sum = ([first, ...rest]) => {
  if (first === undefined) return 0;
  return first + sum(rest);
};