LeetCode题解 => 509.斐波那契数(六十一)

汇总:LeetCode题解 专栏收录该内容
128 篇文章 1 订阅

斐波那契数

一、LeetCode题解

瞧一瞧~

二、算法题

题目

斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

给定 N,计算 F(N)。

输入输出解释
21F(2) = F(1) + F(0) = 1 + 0 = 1.
32F(3) = F(2) + F(1) = 1 + 1 = 2.
43F(4) = F(3) + F(2) = 2 + 1 = 3.

解法一(递归)

  • 简介的代码
  • 对计算机不否友好
var fib = function(N) {
    if(N == 0) return 0
    else if(N == 1) return 1
    else return fib(N-1) + fib(N-2)
};

在这里插入图片描述

解法二(动态规划)

  • 所有可以递归的方式都可以考虑一下动态规划~
var fib = function(N) {
    if(N === 0) return 0
    var val = [];
    for (var i = 0; i <= N; ++i) {
        val[i] = 0;
    } //长度 = 斐波那契数列要算的值
    if (N == 1 || N == 2) {
        return 1; //边界值
    } else {
        val[1] = 1;
        val[2] = 2;
        for (var i = 3; i <= N; ++i) {
            val[i] = val[i - 1] + val[i - 2];
        } // 将每一个数字都算出来,最后即可解决,不用每一个数都想下递归计算
        return val[N - 1];
    }
};

在这里插入图片描述

解法三(递归变式)

function iterFib(n) {
    var last = 1;
    var nextLast = 1;
    var result = 1;
    for (var i = 2; i < n; ++i) {
        result = last + nextLast;
        nextLast = last;
        last = result;
    }
    return result;
}
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值