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);
};