码迷,mamicode.com
首页 > 其他好文 > 详细

尾递归实现斐波那契数列

时间:2019-11-03 16:48:52      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:get   ==   array   href   logs   说明   int   斐波那契数   ||   

 

一、斐波那契数列

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368......

 

二、递归算法

1. 代码

public int fib(int n){
      if(n==1 || n==2){
            return 1;
      }

      return fib(n-1)+fib(n-2);
}

2. 缺点:多次计算重复的fib(n),性能低,一般只用于说明递归算法

 

三、改进:空间换时间,把计算出来的fib(n)存储起来,不用重复计算,空间复杂度O(n)

public int fib(int n){
       int[] array=new int[n];
       array[0]=1;
       array[1]=1;

       for(int i=2;i<n;i++){
           array[i]=array[i-1]+array[i-2];
        }

       return array[n-1];
}

 

四、再次改进,空间减少到O(1),只存储3个数:前两个数和前两个数相加计算出来的结果

public int fib(int n){
       int first=1;
       int second=2;
       int third=3;

       for(int i=3;i<=n;i++){
           third=first+second;
           first=second;
           second=third;
       }

       return third;
}

 

五、尾递归

public int fib(int n,int first,int second){
      if(n<=1){
          return first;
      }

      rerurn fib(n-1,second,first+second);
}

 

 

 

参考:

https://www.cnblogs.com/andy-songwei/p/11707142.html

 

尾递归实现斐波那契数列

标签:get   ==   array   href   logs   说明   int   斐波那契数   ||   

原文地址:https://www.cnblogs.com/june0816/p/6265623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!