菲波那契数列。

什么是菲波那契数列。例子:0,1,1,2,3,5,8,11…这样的数列称为菲波那契数列。直接上代码比较靠谱

/**

* 题目:写一个函数,输入n,求菲波那契数列的第n项

* if 0;=0

* if 1;=1;

* else f(n-1)+f(n-2)

* 菲波那契数列

* 递归和非递归的实现 顺便比较一下两者的效率

* 当n 大于50 是,递归的计算很慢,一直没有算出结果,然后非递归很快就计算出来。

* 在n 逐渐这大n,递归还是不适合。

* Created by Darker on 15/7/17.

*/

public class Fibonacci{

public static void main(String[]args){

System.out.println("递归开始时间:"+System.currentTimeMillis());

System.out.println(findValueUseRecursive());

System.out.println("递归结束时间:"+System.currentTimeMillis());

System.out.println("非递归开始时间:"+System.currentTimeMillis());

System.out.println(findValueUseInterative(50));

System.out.println("非递归结束时间:"+System.currentTimeMillis());

}

//递归实现

public static long findValueUseRecursive(int n){

if(n<=1)return n;

return findValueUseRecursive(n-1)+findValueUseRecursive(n-2);

}

//非递归实现

public static long findValueUseInterative(int n){

if(n<=1)return n;

long firstValue=0;

long secondValue=1; 

long lastValue=0;

for(int i=2;i<=n;i++){

lastValue=firstValue+secondValue;

firstValue=secondValue;

secondValue=lastValue;

}

return lastValue;

}

}

为什么递归在效率上会如此糟糕呢?递归由于是函数的自身调用,而函数的调用时需要消耗时间和空间的,每一次调用都需要内存分配,需要内存栈的出栈,入栈操作。所以自身的效率肯定是低于循环的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题描述 菲波那契数列是指这样的数列:数列的第一个和第二个数都为 1,接下来每个数都等于前面 2 个数之和。给出一...
    指尖极光阅读 1,412评论 0 0
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,165评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,908评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 策划一场相遇 需要多久才能如愿? 躲避一次别离 需要多少借口才行? 有道是随缘随心 可总是违缘违心 延长着每次相处...
    震血封侯阅读 259评论 2 6