斐波那契數列算法分析--遞歸、非遞歸和公式法

類似問題有:

1、排列組合

有一段樓梯有10級臺階,規定每一步只能跨一級或兩級,要登上第10級臺階有幾種不同的走法?
這就是一個斐波那契數列:登上第一級臺階有一種登法;登上兩級臺階,有兩種登法;登上三級臺階,有三種登法;登上四級臺階,有五種登法……
1,2,3,5,8,13……所以,登上十級,有89種走法。
2、一枚均勻的硬幣擲10次,問不連續出現正面的可能情形有多少種?
答案是(1/√5)*{[(1+√5)/2]^(10+2) - [(1-√5)/2]^(10+2)}=144種。
3、兔子繁殖問題
一般而言,兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼一年以後可以繁殖多少對兔子?
//遞歸
long fib1(int n){
	if (n <= 2){
        	return 1;
        }else{
                return fib1(n-1) + fib1(n-2);
       }
}


//非遞歸方法O(n)
long fib3 (int n){
       long x = 0, y = 1;
       for (int j = 1; j < n; j++){
              y = x + y;
              x = y - x;
       }
       return y;
}
//公式法O(1)
long fib5(int n){
       double z = sqrt(5.0);
       double x = (1 + z)/2;
       double y = (1 - z)/2;
       return (pow(x, n) - pow(y, n))/z + 0.5;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章