首页 > 编程语言 > 详细

Javascript之递归求裴波那契数

时间:2020-12-03 10:03:39      阅读:24      评论:0      收藏:0      [点我收藏+]

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

二、裴波那契数定义:

    · 位置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

四、递归的方式

fn1 (n) {
  // debugger
  const memo = [0, 1]

  const fn2 = (n) => {
    if (memo[n] != null) {
      return memo[n]
    }
    const v1 = fn2(n - 1, ‘fn-1‘)
    const v2 = fn2(n - 2, ‘fn-2‘)
    memo[n] = v1 + v2
    // memo[n] = nv
    return memo[n]
  }
  /* 解析版本如下
    const v1 = fn2(n - 1, ‘fn-1‘) // n的值 -> 9、8、7、6、5、4、3、2,首次的值为 memo[1] -> 1
    const v2 = fn2(n - 2, ‘fn-2‘) // n的值为v1 n的值的反转,首次的值为 memo[0] -> 0
    memo[n] = v1 + v2 // 首次为 1 + 0 -> memo[2] = 1
    return memo[n]

  */

  return fn2(n)
}
console.log(fn1(10)) // 55

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

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

Javascript之递归求裴波那契数

原文:https://www.cnblogs.com/jingxuan-li/p/14077337.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!