我想她只是丟個事給我這無聊老頭作作,免得我老人吃呆了,她要提早退休照顧我…哈哈
(就跟丟一根骨頭給一隻老狗玩玩,隨意打發一下…)
為什麼我這麼說呢,因為很多C的書都有這類範例,只要肯上圖書館,甚至肯在Google 上用對了關鍵字去「咕狗」一下,一定可以找到不同解法…
所以,她問我這題一定只是隨便應付我一下而已…我想…
另外一個可能是,她創造力太豐富,不想看別人的解法,想自己兜兜看…
好了,先「咕狗」一下「費氏數列」,在有水準(所以比較可靠)的維基百科上看到定義,以及說明,雖是只是大略的瞄了一下,不禁肅然起敬,真是簡潔完美…各位可以參考如下 維基百科中文-費氏數列 英文的更棒,還有螺旋圖呢
- F0 = 0
- F1 = 1
- Fn = Fn - 1 + Fn - 2
由上三式簡單關係,可知若要以迴圈來解,應該是先把第零、第一項先寫好,再用第三式來寫迴圈。因為,每次迴圈都需要前兩項,所以,第一個迴圈必須由F2開始。迴圈無法處理n=0,或n=1的狀況,它們要由特例來處理。
下面是第一個嘗試,前面的#include省略不列,主要試的是咖啡色的判斷結構,看能不能正確的把第0,第1項和其餘的分開。
int main()
{
int n,f;
printf("Input n to find fab# :");
scanf("%d",&n);
if (n==0){ f=0; }
else if (n==1){ f=1; }
else {f=999;}
printf("Fibonacci #= %d \n",f);
system("PAUSE");
return EXIT_SUCCESS;
}
下面這程式就在「其餘的」部份,架起迴圈。(我把頭、尾省掉了)
int n, f, f_2, f_1, i;
/* f=費氏數 Fn ,
f_1=費氏數之前一項 Fn-1 ,
f_2=費氏數之前2項 Fn-2 ,*/
printf("Input n to find fab# :");
scanf("%d",&n);
f_2=0; f_1=1;
if (n==0){ f=f_2; }
else if (n==1){ f=f_1; }
else {
for (i=2;i<=n;i++){
f=f_2+f_1;
f_2=f_1;
f_1=f;
}
}
printf("Fibonacci #= %d \n",f);
在課本中,有一累似的解法,它寫成函式,將來更好叫用。不過,n=0時,答案可能不一樣?
#include
#include
int f(int); //計算費氏數列
int main(void)
{
int n;
printf("Input n:");
scanf("%d",&n);
printf("f(%d) = %d\n",n,f(n));
system("pause"); //使程式暫停在執行畫面讓我們看到結果
}
int f(int n)
{
int i,sum,pre,fi;
pre = 0;
fi = 1;
for(i=1;i
sum = pre + fi; //加出下一項
pre = fi; //紀錄前一項
fi = sum; //第i項
}
return fi;
}
沒有留言:
張貼留言