新聞中心
費波納切數列用C語言怎么編程
費波納切數列,更通用的音譯是斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、……
為策勒等地區(qū)用戶提供了全套網頁設計制作服務,及策勒網站建設行業(yè)解決方案。主營業(yè)務為做網站、網站建設、策勒網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
數學上的定義是F(0)=0,F(xiàn)(1)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
根據數學定義,就可以編寫生成該數列的代碼,如下:
#include?stdio.h
#define?RANGE?30
static?int?fibonacci_values[RANGE];
void?make_fibonacci_values(void)
{
int?i;
fibonacci_values[0]?=?0;
fibonacci_values[1]?=?1;//賦值前兩項
for(i?=?2;?i??RANGE;?i?++)
fibonacci_values[i]?=?fibonacci_values[i-1]?+?fibonacci_values[i-2];//按照公式生成剩余項
}
int?main()
{
int?i;
make_fibonacci_values();//調用生成函數
for(i?=?0;?i??RANGE;?i?++)
{
printf("F(%d)=%d\n",?i,?fibonacci_values[i]);
}
return?0;
}
這個代碼的功能是生成斐波那契數列前30項。
用一個數組把每項的值保存下來,然后依次計算。
事實上,只需要知道前兩個值,就可以知道下一個值,這樣保存兩個值就可以計算出第三個值了。于是求斐波那契數列第n項的函數也可以寫作:
#include?stdio.h
int?fibonacci(int?n)
{
int?i;
int?a,b,c;
if(n0)?return?0;?//這其實是一種出錯情況。
if(n?==?0)?return?0;
if(n?==?1)?return?1;//處理前兩項的情況
a?=?0;
b?=?1;//對操作數賦初始值
for(i?=?2;?i?=?n;?i?++)//第一個計算結果其實是F(2),所以i的初始值用2
{
c?=?a+b;//這時的c即F(i)
a?=?b;
b?=?c;
}
return?c;
}
int?main()
{
int?n;
scanf("%d",n);//輸入一個n
printf("F(%d)?=?%d\n",?n,?fibonacci(n));//輸出數列第n項值
return?0;
}
同樣,對于這類問題也可以用遞歸思想,使代碼變得更簡潔。
#include?stdio.h
int?fibonacci(int?n)
{
if(n?==?0)?return?0;
if(n?==?1)?return?1;//處理前兩項的情況
return?fibonacci(n-1)?+?fibonacci(n-2);
}
int?main()
{
int?n;
scanf("%d",n);//輸入一個n
printf("F(%d)?=?%d\n",?n,?fibonacci(n));//輸出數列第n項值
return?0;
}
以上是求斐波那契數列的三種常見的方式。值得注意的一點是,實際使用中要注意使用類型的范圍,不要溢出。
比如在這幾個程序中使用的是最簡單的int類型,最大可以計算到F(46), 而F(47)已經超過了int所能表達的范圍,會發(fā)生溢出。如果需要更大的值,那么就要改成使用更多字節(jié)的類型。比如long long等。
C語言進階:求斐波那契數列
工具/材料
visual studio
01
求斐波那契數列有兩種思路:循環(huán)與遞歸。我們首先來看循環(huán)的方式。為了與實際下標對應,我設置數組第一項為0。
02
對索引i的值進行判斷:i==1,則令a[i]=1。否則a[i]=a[i-1]+a[i-2];
03
然后再添加一個打印函數,只需要打印第1-n項即可。
04
編寫測試函數,用n=5與n=10測試,代碼與結果如下:
05
在這里,我寫出求第n項的函數,接下來只需要添加一個外函數就可以求出。
06
接下來,測試n=5與n=10,即依次調用遞歸函數計算每一個值。
07
運行的結果如下,與之前的循環(huán)一致。
求用C語言表達斐波那契數列
#include stdio.h
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);
}
波那契數列,又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞歸的方法定義:
F(0)=0,F(xiàn)(1)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在現(xiàn)代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,為此,美國數學會從1963起出版了以《斐波納契數列季刊》為名的一份數學雜志,用于專門刊載這方面的研究成果。
C語言:利用函數遞歸求斐波那契數列,輸出該數列的前17項,每行輸出5個數。
#include
#define
COL
5
//一行輸出5個
long
fibonacci(int
n)
{
//fibonacci函數的遞歸函數
if
(0==n||1==n)
{
//fibonacci函數遞歸的出口
return
1;
}
else
{
return
fibonacci(n-1)+fibonacci(n-2);
//反復遞歸自身函數直到碰到出口處再返回就能計算出第n項的值
}
}
int
main(void)
{
int
i,n;
n=
17;
printf("Fibonacci數列的前%d項\n",
n);
for
(i=0;
i
{
printf("%-10ld",fibonacci(i++));
//調用遞歸函數并且打印出返回值
if(i%COL==0)
{
//若對COL取余等于0就換行,也就是控制每行輸出多少個,
//而COL=10就是每行輸出10個
printf("\n");
}
}
printf("\n");
return
0;
}
網頁名稱:c語言函數頭斐波那契數列 求斐波那契數列c語言
本文URL:http://fisionsoft.com.cn/article/hpgpjd.html