进行数组求和,不允许使用循环和标准库函数,怎么办?

众所周知,任何循环都可以转化成递归,那么数组求和也当然可以

假设f(i)的值为数组从下标i到末尾所有项的和,那么f(i)=arr[i]+f(i+1)

求整个数组的和,那自然是数组从下标0到末尾所有项的和,也就是f(0)

这可以用于作递归的条件,当然需要有递归出口:当下标越界时不能继续进行递归,而是返回0

1
2
3
4
5
6
7
8
9
const arr = [1, 1, 4, 5, 1, 4, 1, 9, 1, 9, 8, 1, 0]
const sum = (arr) => {
const core = (arr, i) => {
return i >= arr.length ? 0 : arr[i] + core(arr, i + 1)
}
return core(arr, 0)
}

console.log(sum(arr))

同样,乘法也可以这样递归

1
2
3
4
5
6
const sum = (arr) => {
const core = (arr, i) => {
return i >= arr.length ? 1 : arr[i] * core(arr, i + 1)
}
return core(arr, 0)
}

那么其他循环转递归可不可以遵循这个逻辑呢?我觉得是可以的,毕竟循环就是不断推进的下标

不过很多场合下也用不着递归的,性能不好