這篇文章將為大家詳細(xì)講解有關(guān)C語言中怎么實(shí)現(xiàn)斐波那契數(shù)列,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
明水網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),明水網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為明水近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的明水做網(wǎng)站的公司定做!
C語言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列
首先,關(guān)于遞歸深度,遞歸提供了一個(gè)簡單的定義。如果調(diào)用Fibonacci(),當(dāng)n為1或2時(shí)Fibonacci(n)應(yīng)返回1;對(duì)于其他數(shù)值應(yīng)返回Fibonacci(n-1)+Fibonacci(n-2);
long Fibonacci(n) { if (n > 2) return Fibonacci(n-1)+Fibonacci(n-2); else return 1; }
然后是兔子總數(shù)問題。
有一對(duì)兔子,從出生后第三個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長到第三個(gè)月后又生一對(duì)兔子,假如兔子都不死,每個(gè)月兔子對(duì)數(shù)為多少?
思考這道題的時(shí)候,如果你簡單的推算一下,會(huì)發(fā)現(xiàn)兔子每個(gè)月的對(duì)數(shù)就是斐波那契數(shù)列。
第一個(gè)月:1對(duì);
第二個(gè)月:1對(duì);
第三個(gè)月:2對(duì);
第四個(gè)月:3對(duì):
第五個(gè)月:5對(duì):
第六個(gè)月:8對(duì);
……
我之前做這道題的時(shí)候,覺得思路很簡單,就是從第三個(gè)月起,求每個(gè)月的兔子數(shù)時(shí),只要把這個(gè)月的前兩個(gè)月總數(shù)相加。
這是我之前的代碼,用f1和f2表示月。:
#includeint main() { int f1,f2; int month,ct; printf("請(qǐng)輸入月份:"); scanf("%d",&month); if(month<=2) printf("兩只。\n"); if (month > 2) { f1 = f2 = 1; ct = 0; while(ct < month -2){ f1 = f1+f2; ct += 1; f2 = f1+f2; ct += 1; } if (month %2 == 0){ printf("第 %d 個(gè)月的兔子對(duì)數(shù)為:%d.\n",month,f2); } if (month %2 == 1){ printf("第 %d 個(gè)月的兔子對(duì)數(shù)為:%d.\n",month,f1); } } return 0; }
其實(shí)這個(gè)代碼離遞歸就差一步,很接近了。但是我當(dāng)時(shí)完全沒有想到。
這是我重新修改之后的代碼:
#includelong Fibonacci(n) { if (n > 2) return Fibonacci(n-1)+Fibonacci(n-2); else return 1; } int main() { long num; int month; printf("請(qǐng)輸入月份:"); scanf("%d",&month); num = Fibonacci(month); printf("這個(gè)月的兔子對(duì)數(shù)為%d.\n",num); return 0; }
關(guān)于C語言中怎么實(shí)現(xiàn)斐波那契數(shù)列就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。