一个不一样的数组求和
一、常用的求和
数组求和大家都不陌生,比如用for
:
let Arr = [...]
let num = 0
for (let i=0 ;i>=Arr.lenght;i++){
num +=Arr[i]
}
还可以用forEach
、map
等循环函数里就不赘述了。那如果不允许使用循环或者不允许使用标准库的函数,那么还可以对数组进行求和吗?答案是:当然可以。
二、使用递归进行数组求和
我们先来看一下求和过程:
let arr = [0,1,2,3,4] //假设有一个数组
let num = arr[0]+arr[1]+...+arr[4]
这样看上去就很笨重,且应用性非常差,那么我们可以这样:
假设一个函数fn
fn(0)表示从arr[0] +...
fn(1)表示从arr[1] +...
那么:fn(0) = arr[0] + fn(1)
也就是说:fn(i) = arr[i] + fn(i+1)
转化成递归函数:
let arr = [0,1,2]
let f = (i) => {
//处理下边界情况
return i >= arr.length ? 0 : arr[i] + f(i+1)
}
console.log(f(0)) // 3
基本逻辑有了,那么我们进行下封装:
let Sum = (arr,index) => {
let f = (i) => {
return i >= arr.length ? 0 : arr[i] + f(i+1)
}
return f(index)
}
console.log(Sum([1,2,3],0))//6
console.log(Sum([1,2,3],1))//5
好,到这里递归算法就完成了,希望对您有所帮助!