4 回答

TA贡献1824条经验 获得超5个赞
我对数组进行切片,直到它变空,并用它的第一个元素增加总和值。由于您正在学习递归,我认为此解决方案将帮助您更好地理解递归。但是,考虑到良好的实践和性能,您应该更喜欢reduce。
function sumOfInts(array, sum = 0) {
if (array.length === 0) return sum;
return sumOfInts(array.slice(1), sum + array[0]);
}

TA贡献2012条经验 获得超12个赞
除非这是一个练习,否则您不需要递归。恕我直言Array#reduce更适合这项任务:
const sum = xs => xs.reduce((tot, x) => tot + x, 0);
sum([1,2,3,4]);
//=> 10
使用递归,您应该利用参数解构和默认值:
const sum = ([x = 0, ...xs]) => xs.length === 0 ? x : x + sum(xs);
sum([1,2,3,4]);
//=> 10

TA贡献1820条经验 获得超10个赞
这是一个带有经典函数式编程成分的版本:
const head = ([h]) => h;
const tail = ([, ...t]) => t;
const sumOfInts = (array) => array.length == 0 ? 0 : head(array) +
sumOfInts(tail(array))
sumOfInts([1,2,3,4])
// => 10

TA贡献1866条经验 获得超5个赞
希望这可以帮助。
function sumOfInts(arr) {
if (arr.length > 0){
//Check if length is greater than 0 .
//If yes then get all the element but not the last
//And recursively pass the spliced array to the sumOfInts.
return sumOfInts(arr.splice(0,arr.length - 1)) + arr[0];
}
return 0;
}
let sum = sumOfInts([1,2,3,4,5]) ;
console.log(sum);
添加回答
举报