#include stdio.h
成都創(chuàng)新互聯(lián)是專業(yè)的達茂旗網(wǎng)站建設(shè)公司,達茂旗接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行達茂旗網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
main( ){
long f1,f2,f;
int i,n;
scanf("%d",n);
f1=f2=1;
if(n=2)
f=1;
else
for(i=3;i=n;i++){
f=f1+f2;
f1=f2;
f2=f;
}
printf("%ld\n",f);
}
波那契數(shù)列,又稱黃金分割數(shù)列,指的是這樣一個數(shù)列:0、1、1、2、3、5、8、13、21、34、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞歸的方法定義:
F(0)=0,F(xiàn)(1)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在現(xiàn)代物理、準(zhǔn)晶體結(jié)構(gòu)、化學(xué)等領(lǐng)域,斐波納契數(shù)列都有直接的應(yīng)用,為此,美國數(shù)學(xué)會從1963起出版了以《斐波納契數(shù)列季刊》為名的一份數(shù)學(xué)雜志,用于專門刊載這方面的研究成果。
工具/材料
visual studio
01
求斐波那契數(shù)列有兩種思路:循環(huán)與遞歸。我們首先來看循環(huán)的方式。為了與實際下標(biāo)對應(yīng),我設(shè)置數(shù)組第一項為0。
02
對索引i的值進行判斷:i==1,則令a[i]=1。否則a[i]=a[i-1]+a[i-2];
03
然后再添加一個打印函數(shù),只需要打印第1-n項即可。
04
編寫測試函數(shù),用n=5與n=10測試,代碼與結(jié)果如下:
05
在這里,我寫出求第n項的函數(shù),接下來只需要添加一個外函數(shù)就可以求出。
06
接下來,測試n=5與n=10,即依次調(diào)用遞歸函數(shù)計算每一個值。
07
運行的結(jié)果如下,與之前的循環(huán)一致。
程序的算法是用了遞歸調(diào)用 ,就是一種直接或者間接地調(diào)用自身的算法,且必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。 輸入一個數(shù)后,調(diào)用Fibonacci(int n)函數(shù)并執(zhí)行,當(dāng)判斷n不等于1或者2時,則不斷地執(zhí)行t1=Fibonacci(n-1);t2=Fibonacci(n-2);語句,直到n=1或者n=2時才有確定的值1,然后再遞推回去就得到Fibonacci(int n)的值了。
斐波那契數(shù)列問題,做為學(xué)習(xí)一般都用遞歸來寫,默認(rèn)情況下都設(shè)置程序運行時默認(rèn)的??臻g大小為1MB,下面是遞歸調(diào)用的實例。
#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;
}
C語言源程序如下:
#includestdio.h
int main()
{
int array[100]={1,1};//斐波那契數(shù)列前兩個元素均為0
int i=0;//循環(huán)變量
int n=20;//數(shù)列需要求的個數(shù)
int sum = 0;//和變量
for(i=2;in+1;i++)//按遞推原理依次求出后續(xù)元素
{
array[i]=array[i-1]+array[i-2];//數(shù)列原理
}
printf("arr[1]-arr[%d] = ", n);//提示輸出數(shù)列元素
for (i = 0; i n; i++)//遍歷數(shù)列
{
printf("%d ",array[i]);//輸出arr[1]-arr[n]元素內(nèi)容
sum += array[i];//順便進行求和
}
printf("\n%d ", sum);//輸出求和結(jié)果
return 0;
}
程序運行結(jié)果如下:
擴展資料:
利用遞歸原理進行求斐波那契數(shù)列的求解和求前n項和:
#includestdio.h
int fibonacci(int n) //遞歸函數(shù)
{?
if (n == 0 || n == 1) ?
return 1; ? ?
if (n 1) ? ? ? ?
return fibonacci(n - 1) + fibonacci(n - 2);?
}?
int main()?
{?
int i = 0; ? ?
for (i = 0; i 30; i++)?
{?
printf("fibonacci(%d) = %d\n", i, fibonacci(i));?
} ? ?
return 0;?
}