转载原文:http://blog.csdn.net/wangshuang1631/article/details/52189305
斐波那契数列是数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,也称为“兔子数列”。
指的是这样一个数列: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*)
由于递归在计算过程中非常慢,所以本文提供了裴波那契数列的非递归实现。并且提供时间参数,用以对比两种方式的性能。
递归的思路是套用公式:F(n) = F(n-1) + F(n-2)
非递归的方式:每次保存上一次计算的结果,当计算新的一天时,只需要把保存的结果相加即可,而不用递归了。
- public static void main(String[] args) {
-
- long currentTime1 = System.currentTimeMillis();
- System.out.println(fibonacciRecursion(40));
- long endTime1 = System.currentTimeMillis()-currentTime1;
- System.out.println("递归方式计算所需时间:"+endTime1);
-
-
- long currentTime2 = System.currentTimeMillis();
- System.out.println(fibonacciNotRecursion(40));
- long endTime2 = System.currentTimeMillis()-currentTime2;
- System.out.println("非递归方式计算所需时间:"+endTime2);
-
- }
-
-
- public static long fibonacciRecursion(long day){
-
- if(day == 0){
- return 0;
- }
-
- if(day == 1){
- return 1;
- }
- else {
- return fibonacciRecursion(day-1)+fibonacciRecursion(day-2);
- }
-
- }
-
- public static long fibonacciNotRecursion(long day){
-
- if(day == 0){
- return 0;
- }
-
- if(day == 1){
- return 1;
- }
-
- long temp1 = 1;
- long temp2 = 1;
- long end = 0;
-
- for(long i = 2;i <= day;i++){
- end = temp1 + temp2;
- temp2 = temp1;
- temp1 = end;
- }
-
- return end;
-
- }
- 问:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
- public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}else if(n==1){
return 1;
}else{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
}