递归函数实现求和

241 阅读1分钟

题目

数组求和,不允许使用循环,不允许使用标准库函数

    // 数组求和,不允许使用循环,不允许使用标准库函数
    let nums = [1, 2, 3, 4, 5]  // 15
    function f(i) {
      if (i >= nums.length) {
        console.log("超过数组索引项了")
        return 0
      } else {
        return nums[i] + f(i + 1)
      }
    }
    console.log(f(0));   // 15

f(i) 表示从数组第i位到末尾之和

f(2)和f(3)的关系是: f(2) = nums[2] + f(3)

=>f(i)与f(i+1)的关系:f(i) = nums[i] + f(i+1)

i>nums.length,那么f(i)=0

    // 封装一下
    function sum(nums) {
      function f(i) {
        if (i >= nums.length) {
          return 0
        } else {
          return nums[i] + f(i + 1)
        }
      }
      return f(0)
    }
    console.log(sum([1, 5, 8, 2, 10]));  // 26