要求 : 数组求和,不允许使用循环,不允许使用标准库的函数
简单分析:
const arr [ 5,1,3,6,2]
f(i) 表示 从数组第 i 位到末尾之和
f(2) 表示 从数组第 2 位到末尾之和 求 3+6+2
f(3) 表示 从数组第 3 位到末尾之和 求 6+2
f(i) 和 f(i+1) 的关系?
//比如 : f(2) 和 f(3) 的关系 :
f(2) = arr[2] + f(3)
// 那么 f(i) 和 f(i+1)的关系就为 :
f(i) = arr[i] + f(i+1)
但是这样是有缺陷的
就是当 i 大于等于了数组的长度之后,也就是它超过了最大的下标 就不能求和了
这个时候就认为 f(i) 应该等于 0
当 i >= arr.length 则 f(i) = 0
当分析到这来之后 ,就可以计算开头要求的题了
要求 : 数组求和,不允许使用循环,不允许使用标准库的函数
const arr= [5,1,3,6,2]
function f(i){
// 因为不能使用循环和不允许使用标准库的函数 就直接return
// 这时得到的结果无非就是两种 :
// 1. i 大于等于数组的长度 ,超过了最大数组的下标
// 2. 正常情况
return i >= arr.length ? 0 : arr[i] + f(i+1)
}
//当从下标0开始到末尾
console.log(f(0))
输出结果为 : 17
当等到一个数组时
function res(arr) {
function f(i){
return i >= arr.length ? 0 : arr[i] + f(i+1)
}
return f(0)
}
// 求一个空数组和 res数组
console.log(res([]) , res([1,2,3]))
// 打印结果为: 0 6
这个题考察的并不是数组求和,而是能否熟练灵活使用递归,是否会算法