思路一:
遞歸
要求第n項,首先就要求出第n-1,n-2項,依次類推。遞歸的出口就是第0項爲0,第1項爲1.使用遞歸雖然代碼很簡單,但如果n大一點的話,所產生的運行時開銷會非常大,這樣做的後果就是效率非常低下。
思路二:
非遞歸 使用非遞歸的話,效率會很高。設置兩個三個變量分別表示當前值和前兩項的值,使用循環求解。(本例中,只使用兩個變量表示這些值)
#include<stdio.h>
#include<stdlib.h>
//遞歸
int fib(int n)
{
if (n == 0)
return 0;
else if (n == 1)
return 1;
return fib(n - 1) + fib(n - 2);
}
//非遞歸
int fib(int n)
{
int num1 = 0;
int num2 = 1;
for (int i = 0; i < n; i++)
{
num1 = num1 + num2; //將num1和num2的後一項的值保存到num1裏面
num2 = num1 - num2; //再將num2換成原來num1的值
}
return num1;
}
//test
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
system("pause");
return 0;
}