题解 | #斐波那契数列#

斐波那契数列

http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3

一.题目描述
对于斐波那契数列的介绍:斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)(来源百度)

现在要求一个斐波那契数列((从0开始,第0项为0,第1项是1))的第n项是多少?

二.算法1(递归解法)
从斐波那契数列的计算公式:图片说明 ,可自然想到该问题适合使用递归法求解,下面直接给代码。
图片说明

class Solution {
public:
    int Fibonacci(int n) {
        if(n<=1) return 1;
        else return Fibonacci(number-1)+Fibonacci(number-2);
    }
};

复杂度:o(2^n)
优缺点:写法简单,但是指数级的复杂度太高,在所求位数较大时响应时长无法接受。
三.算法2(循环数组)
如果说前面的递归解法是自顶向下将大问题拆解成小问题求解,那么循环解法则是逆向思维,自底向上,先求出小问题的解,再向上一步一步向上求取最终问题的解。求解过程分为n步,将每一步的结果保存在列表中对应下标的位置,代码如下。
图片说明

class Solution {
public:
    int Fibonacci(int n) {
           int dp[45];
           dp[1]=1;
           dp[2]=1;
           for(int i=3;i<=n;i++){//这块需要注意 是从第3项开始的
               dp[i]=dp[i-1]+dp[i-2];
           }
           return dp[n];
    }
};

复杂度:单层循环,时间复杂度为o(n)
优缺点:写法简单,但是没有优化空间了

全部评论
也有优化空间,把最后一次循环去掉,return dp[n-1]+dp[n-2],哈哈哈哈哈
点赞 回复 分享
发布于 2021-11-11 19:07

相关推荐

虽然大家都在劝退读研,说读研以后也是打工,不如本科直接去打工,但随着现在研究生越来越多,很多企业招聘要求就会变成研究生起招,本科投递简历就会被卡,横向比较时也会因为"本科学历比不上研究生学历"被筛掉,而且你没发现劝退读研的基本都是读完研的人吗?而且进体制、国企等,研究生也比本科生升的快,他们拿着研究生文凭劝你一个本科生,可别当真了
球1个offer:每个行业都是不一定的,例如计算机开发岗,只要是92学历,完全可以冲互联网大厂,没进去抛开运气因素,就是不够努力,准备的晚没有实习等等。计算机算法岗还是要读研的,研究生是基本要求。现在太多人无脑考研了,因为本科秋招春招啥都没准备过,只能读研
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务