算法学习之不斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

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

方法很多,最简单的方法就是按照斐波那契数列递归计算。

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

时间复杂度:O(2^n);

空间复杂度:O(1);

再来一种优化完的方法:

思路:因为第n个数就是n-1与n-2的和,所以我们可以根据n-1与n-2得到结果(并且此处使用sum变量替换了one后边的一位数tow,sum担任了两个责任)

public class Solution {
    public int Fibonacci(int n) {
           if(n<2){
             return n;
           }
           int one = 0;
           int sum = 1;
           for(int i = 2;i<=n;i++){
               sum = sum+one;
               one = sum-one;
           }
           return sum;
    }
}

时间复杂度:O(n);

空间复杂度:O(1);                       

练习地址:https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值