首页 > 其他 > 详细

剑指offer:斐波那契数列

时间:2019-06-22 18:35:21      阅读:136      评论:0      收藏:0      [点我收藏+]

题目

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

n<=39

解题思路

菲波那切数列是最经典的用来做递归举例的案例,但是用菲波那切数列的复杂度为2的指数次方,时间复杂度非常高,当n很大时还会造成栈溢出

分析求解过程

技术分享图片

可以看到很多节点的值被重复计算了,因此我们可以采用自下而上用循环的方式保存上一次计算的值避免重复计算,由f(0)、f(1)计算出f(2),由f(1)、f(2)计算出f(3)

由此类推,则时间复杂度为O(n)

 

代码

思路一:递归

1     public int Fibonacci(int n) {
2         if(n==0 ||n==1)
3             return n;
4         else{
5             return Fibonacci(n-1)+Fibonacci(n-2);
6         }
7     }

 

思路二:循环

 1     public int Fibonacci(int n) {
 2         if(n==0){
 3             return 0;
 4         }
 5         int fibMinusOne = 1,fibMinusTwo = 0;
 6         for(int i=1;i<n;i++){
 7             int tmp = fibMinusOne;
 8             fibMinusOne = fibMinusOne + fibMinusTwo;
 9             fibMinusTwo = tmp;
10         }
11         return fibMinusOne;
12     }

 

剑指offer:斐波那契数列

原文:https://www.cnblogs.com/huanglf714/p/11069624.html

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