程序的算法是用了遞歸調(diào)用 ,就是一種直接或者間接地調(diào)用自身的算法,且必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口。 輸入一個(gè)數(shù)后,調(diào)用Fibonacci(int n)函數(shù)并執(zhí)行,當(dāng)判斷n不等于1或者2時(shí),則不斷地執(zhí)行t1=Fibonacci(n-1);t2=Fibonacci(n-2);語(yǔ)句,直到n=1或者n=2時(shí)才有確定的值1,然后再遞推回去就得到Fibonacci(int n)的值了。
中山網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
#include
int
fib(int
n)//遞歸函數(shù)
{
//斐波那契數(shù)列算法
if(n==1||n==2)
return
1;
return
fib(n-1)+fib(n-2);
}
int
main()
{
int
n;
scanf("%d",n);
printf("%d\n",fib(n));
return
0;
}
斐波那契數(shù)列在數(shù)學(xué)上的通項(xiàng)公式為
An=An-1+An-2
在C語(yǔ)言中,根據(jù)算法實(shí)現(xiàn)不同,可以有很多種表達(dá)方式。以計(jì)算斐波那契第N項(xiàng)值為例,說(shuō)明如下。
一、以數(shù)組方式實(shí)現(xiàn):
int?fn(int?n)
{
int?*a,i,r;
a=(int?*)malloc(sizeof(int)*n);//分配動(dòng)態(tài)數(shù)組。
a[0]=1;
a[1]=1;//初始化前兩項(xiàng)。?
for(i?=?2;?in;?i?++)
{
a[i]=a[i-1]+a[i-2];//這里就是通項(xiàng)公式的一種實(shí)現(xiàn)形式。?
}
r?=?a[n-1];//保存結(jié)果
free(a);//釋放動(dòng)態(tài)數(shù)組
return?r;//返回結(jié)果值。?
}
二、以遞歸函數(shù)形式:
int?fn(int?n)
{
if(n?==?0?||?n?==?1)?return?1;//前兩項(xiàng)固定值。
return?fn(n-1)+fn(n-2);//?通過(guò)遞歸調(diào)用實(shí)現(xiàn)通項(xiàng)公式。?
}
三、注意事項(xiàng):
1、方法有很多,不可能窮舉完成,寫(xiě)代碼時(shí)要靈活使用。
2、例子中以int保存,限于整型范圍,計(jì)算很大值時(shí)會(huì)出現(xiàn)溢出。 根據(jù)實(shí)際需要選擇類型。
斐波那契數(shù)列問(wèn)題,做為學(xué)習(xí)一般都用遞歸來(lái)寫(xiě),默認(rèn)情況下都設(shè)置程序運(yùn)行時(shí)默認(rèn)的棧空間大小為1MB,下面是遞歸調(diào)用的實(shí)例。
#includestdio.h
int?fibo(int?a)
{
if(a=2)
return?1;
else
return?fibo(a-1)+fibo(a-2);
}
int?main()
{
int?a;
while(scanf("%d",a)!=EOF)
printf("%d\n",fibo(a));
return?0;
}
#include stdio.h
int fn(int a)
{
if (a==1)
return 1;
else
{
if (a==2)
return 2;
else
return fn(a-1)+fn(a-2);
}
}
void main ()
{
int i;
FILE *fp;
fp=fopen("e:\\jieguo.txt","w"); // 保存的路徑,可以該。
for (i=1;i=50;i++)
fprintf(fp,"%d:%d\n",i,fn(i));
fclose(fp);
}
注意: 程序運(yùn)行的有點(diǎn)慢,要等一會(huì)兒, 你可以把 50改成 10 ,就能看見(jiàn)運(yùn)行的結(jié)果了
在E盤(pán)的jieguo.txt中。
#include
#define
COL
5
//一行輸出5個(gè)
long
fibonacci(int
n)
{
//fibonacci函數(shù)的遞歸函數(shù)
if
(0==n||1==n)
{
//fibonacci函數(shù)遞歸的出口
return
1;
}
else
{
return
fibonacci(n-1)+fibonacci(n-2);
//反復(fù)遞歸自身函數(shù)直到碰到出口處再返回就能計(jì)算出第n項(xiàng)的值
}
}
int
main(void)
{
int
i,n;
n=
17;
printf("Fibonacci數(shù)列的前%d項(xiàng)\n",
n);
for
(i=0;
i
{
printf("%-10ld",fibonacci(i++));
//調(diào)用遞歸函數(shù)并且打印出返回值
if(i%COL==0)
{
//若對(duì)COL取余等于0就換行,也就是控制每行輸出多少個(gè),
//而COL=10就是每行輸出10個(gè)
printf("\n");
}
}
printf("\n");
return
0;
}
分享名稱:函數(shù)的斐波那契c語(yǔ)言 斐波那契c語(yǔ)言求和
URL網(wǎng)址:http://www.chinadenli.net/article14/doogide.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、企業(yè)網(wǎng)站制作、App設(shè)計(jì)、用戶體驗(yàn)、App開(kāi)發(fā)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容