Javascript之递归求裴波那契数

一、遍历的方式性能更加,递归的方式代码利于阅读、简短,性能略差

二、裴波那契数定义:

    · 位置0的裴波那契数为0

    · 1和2的裴波那契数为1

    · n(n > 2)裴波那契数为 (n-1)的裴波那契数 + (n-2)裴波那契数

三、遍历的方式

fibonacciIterative (n) {
      if (n < 1) {
        return 0
      }
      if (n <= 2) {
        return 1
      }
      let fibNMinus2 = 0
      let fibNMinus1 = 1

      let fibN = n

      for (let i = 2; i <= n; i++) {
        fibN = fibNMinus1 + fibNMinus2
        // 更新上一次的裴波那契数(n - 2)
        fibNMinus2 = fibNMinus1
        // 记录当前的裴波那契数(n - 1)
        fibNMinus1 = fibN
      }

      return fibN
    }

console.log(fibonacciIterative(10) // 55
四、递归的方式

function fn(n) {
    const memo = [0, 1]

    function _fn(n) {
        if(memo[n] !== undefined){
            return memo[n]
        }

        const result = _fn(n - 2) + _fn(n - 1)
        memo[n] = result
        return memo[n]
    }

    return _fn(n)
}

console.log(fn(10)) // 55
  /* 解析
    _fn(n - 1) // n的值 -> 9、8、7、6、5、4、3、2,首次的值为 memo[1] -> 1
    _fn(n - 2) // n的值为v1 n的值的反转,首次的值为 memo[0] -> 0
    memo[n] = result // v1 + v2 // 首次为 1 + 0 -> memo[2] = 1
    return memo[n]

  */
console.log(fn1(10)) // 55

  

  欢迎访问博客站:http://www.devloper.top/article/detail/0efbec70-34b8-11eb-8b91-7b988df38548

-- 希望,只有和勤奋作伴,才能如虎添翼 --