【遞迴】 之 菲波那契數列
問題描述
菲波那契數列是指這樣的數列:數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。給出一個正整數a,要求菲波那契數列中第a個數是多少。輸入資料
第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a(1 <= a <= 20)。
輸出要求
n行,每行輸出對應一個輸入。輸出應是一個正整數,為菲波那契數列中第a個數的大小。
輸入樣例
4
5
2
19
1
輸出樣例
5
1
4181
1
解題思路
這個題目要求很明確,因為a的規模很小,所以遞迴呼叫不會產生棧溢位的問題。設第n項值為f(n),則 f(n) = f(n-1)+f(n-2)。已知f(1)=1,f(2)=1,則從第3項開始,可以用公式求。
參考程式
#include <stdio.h>
int f(int a){
if( a == 1 || a == 2 ) return 1;
return f(a - 1) + f(a - 2);
}
void main()
{
int n;
scanf("%d",&n);
for(int i = 1; i <= n ; i++){
int a;
scanf("%d", &a);
printf("%d\n", f(a));
}
}