十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
#includestdio.h

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),固鎮(zhèn)企業(yè)網(wǎng)站建設(shè),固鎮(zhèn)品牌網(wǎng)站建設(shè),網(wǎng)站定制,固鎮(zhèn)網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,固鎮(zhèn)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
//求斐波那契數(shù)列第n項
int?fib(int?n)
{
if(n?==?0?||?n?==?1)
return?1;
else
return?(fib(n-1)+fib(n-2));
}
int?main()
{
int?i,n;
printf("-----輸入一個斐波那契數(shù)-----\n");
scanf("%d",n);
for(i=0;in;i++)
printf("%d\t",fib(i));
printf("\n");
return?0;
}
編譯結(jié)果:
./a.out
-----輸入一個斐波那契數(shù)-----
8
1 1 2 3 5 8 13 21
方法2:
#include stdlib.h
#include stdio.h
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2);
}
}
int main()
{
int n = 0;
int m=0;
int ret = 0;
printf("請輸入要計算的斐波那契數(shù)列的前N項總數(shù):");
scanf("%d", n);
m=n;
do
{
ret += Fibon1(n);
n--;
} while (n0);
printf("前%d項目和ret=%d", m,ret);
getchar();
getchar();
return 0;
}
運行結(jié)果:
方法4:
#include stdlib.h
#include stdio.h
int Fibon1(int n);
int main()
{
int n = 0;
int m=0;
int ret = 0;
printf("請輸入要計算的斐波那契數(shù)列的前N項總數(shù):");
scanf("%d", n);
m=n;
do
{
ret += Fibon1(n);
n--;
} while (n0);
printf("前%d項目和ret=%d", m,ret);
getchar();
getchar();
return 0;
}
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2);
}
}
運行結(jié)果:
斐波那契數(shù)列問題。這個與漢諾塔都屬于來源來生活的比較典型的例子。
題目不難,主要是分析出兔子總數(shù)的每個月的變化規(guī)律然后編程就會非常簡單了。
表達式為F[n]=F[n-1]+F[n-2](n=2,F[0]=0,F[1]=1),即前兩項比較特殊,然后從第三項開始,值為前兩項之和。如:0,1,1,2,3,5,8,13,21......
方法有多種,一般用遞歸比較簡單明了。分析寫在注釋里了,有不懂的請追問。
int Fibon1(int n)
{
if (n == 1 || n == 2)
{
return 1; //如果n是1或者2,結(jié)果為1。
}
else
{
return Fibon1(n - 1) + Fibon1(n - 2); //如果不是n不是1和2,那么調(diào)用Fibon1函數(shù)。
} //直到參數(shù)n變?yōu)?,即上述變?yōu)?+0.
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", n);
ret = Fibon1(n); //調(diào)用函數(shù)(遞歸)
printf("ret=%d", ret);
return 0;
}
1.int f1=0,f2=1,f3;
2.return f3;
繼續(xù)寫:f3=f1+f2;
f2=f3;
f1=f2;
//遞歸法
int fibo1(int n)
{
if( n == 1 || n == 2) return 1;
else return fibo1(n-1)+fibo1(n-2);
}
//遞推法
int fibo2(int n)
{
int f0=1,f1=1,f;
if (n2)
return 1;
for(int i=2;in-1;i++)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}
區(qū)別:遞推是直接使用已知的條件去推出未知的條件;遞歸則是將大問題逐漸轉(zhuǎn)化為若干個相同的子問題,直到得到已知的最小子問題,再回溯依次得到父問題的答案。是由未知到已知,再從已知到未知。對于復(fù)雜的問題,遞歸把問題簡單化,讀起來易懂。