斐波那契數列

/*斐波那契數列:
    經典數學問題之一;斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:
    1、1、2、3、5、8、13、21、……
    想必看到這個數列大家很容易的就推算出來後面好幾項的值,那麼到底有什麼規律,簡單說,就是前兩項的和是第三項的值,也許你會想到的是迭代,也學你想到的是遞歸。
    f(n) = f(n-1) + f(n-2);
*/

#include <iostream>

using namespace std;

int n1 = 0;//記錄普通的遞歸次數  
int n2 = 0;//優化的遞歸次數 

//普通遞歸函數,默認斐波那契數列的第一項爲1,第二項爲1
int Fibonacci1(int n)
{
	n1++;
	if (n <= 2)//遞歸出口  
	{
		return 1;
	}

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

//優化後的遞歸函數,默認斐波那契數列的第一項爲a,第二項爲b
int Fibonacci2(int a, int b, int n)
{
	n2++;
	if (n > 2)
	{
		return Fibonacci2(a + b, a, n - 1);
	}
	else if (n = 2)
	{
		return b;
	}

	return a;
}


int main()
{
	int n;
	std::cout << "輸入數據: ";
	std::cin >> n;
	std::cout << "Fibonacci1(" << n << ")=" << Fibonacci1(n) << ", counter1=" << n1 << std::endl;
	std::cout << "Fibonacci2(" << n << ")=" << Fibonacci2(1,2,n) << ", counter2=" << n2 << std::endl;

	while ('a' != getchar());
	return 0;
}

 

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