新聞中心
go語言 使用遞歸與循環(huán)兩種方式計(jì)算斐波那契數(shù)列
給定一個(gè)正整數(shù)n計(jì)算出對(duì)應(yīng)斐波那契數(shù)列對(duì)應(yīng)的值
我們一直強(qiáng)調(diào)網(wǎng)站建設(shè)、成都網(wǎng)站制作對(duì)于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對(duì)待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)絡(luò)公司不一定是大公司,創(chuàng)新互聯(lián)公司作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
說明:
用mackbookpro i7 2.7GHZ筆記本進(jìn)行測試,結(jié)果如下:
備注: 當(dāng)n=80時(shí),由于測試等待時(shí)間過長,強(qiáng)制中斷了執(zhí)行。
從測試結(jié)果看出,當(dāng)n逐漸增大,遞歸方式計(jì)算斐波拉契數(shù)列的時(shí)間復(fù)雜性急劇增加。當(dāng)n值較大時(shí)可以考慮用循環(huán)方式代替。
類似的方式也可以用于,求階乘、遍歷目錄、漢諾塔等問題的解決。在后期的文章中,我將這些內(nèi)容進(jìn)行補(bǔ)充,敬請(qǐng)期待,謝謝。
Go語言 斐波那契數(shù)列的解法
這么寫效率很低,沒有剪枝,存在大量的重復(fù)計(jì)算。
反正你測試用例是有限的,那我騙過你的測試用例就行了啊;)
二、 編寫一個(gè)遞歸函數(shù),計(jì)算并返回斐波那契數(shù)列中第n項(xiàng)的值,斐波那契數(shù)列定義如下:
#include
fib(int n)
{if(n==0)return(0);
else if(n==1)return(1);
else
return(fib(n-1)+fib(n-2));
}
main()
{int n,s;
scanf("%d",n);
s=fib(n);
printf("%d\n",s);
}
擴(kuò)展資料:
scanf用法:
輸出的值只是空格前面的字符是因?yàn)閟canf函數(shù)的輸入格式錯(cuò)誤,輸入?yún)?shù)的變量前需要加。
scanf("%s",s);改為scanf("%s",s);
scanf的用法是:scanf("格式控制字符串",輸入?yún)?shù)一,輸入?yún)?shù)二);
格式控制字符串包含:格式控制說明,普通字符。
1、格式控制字符串表示輸入的格式,(int型用%d,float用%f,double型用%lf)
2、普通字符:在輸出數(shù)據(jù)的時(shí)候,按照原樣輸出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。
3、輸入的參數(shù)是變量的地址,所以要在變量前面加。
用遞歸法計(jì)算斐波那契數(shù)列的第n項(xiàng)
用遞歸方法計(jì)算斐波那契數(shù)列的第n項(xiàng)的代碼如下:
#include?stdio.h
int?Fibonacci(int?n)
{
if(?n?==?1?||?n?==?2)?//?遞歸結(jié)束的條件,求前兩項(xiàng)
return?1;
else
return?Fibonacci(n-1)+Fibonacci(n-2);?//?如果是求其它項(xiàng),先要求出它前面兩項(xiàng),然后做和。
}
int?main()
{
int?n;
printf("please?input?n:?");
scanf("%d",n);
printf("Result:?%d\n",Fibonacci(n));
return?0;
}
擴(kuò)展資料一【非遞歸方式計(jì)算斐波那契數(shù)列第N項(xiàng)】
#includeiostream
using?namespace?std;
int?Fib(int?n)
{
if(n==1?||?n==2)
return?1;
int?fib1=1;
int?fib2=1;
int?fib;
for(int?i=3;?i=n;?++i)
{
fib?=?fib1?+?fib2;
fib2?=?fib1;
fib1?=?fib;
}
return?fib;
}
void?main()
{
int?n;
cout"input?n:";
cinn;
coutFib(n)endl;
}
擴(kuò)展資料二【斐波那契數(shù)列的起源】
由于斐波納挈數(shù)列是以兔子的繁殖引入的數(shù)學(xué)問題,因此也叫“兔子數(shù)列”,指的是這樣一個(gè)數(shù)列:0,1,1,2,3,5,8,13...... 從這組數(shù)可以很明顯看出這樣一個(gè)規(guī)律:從第三個(gè)數(shù)開始,后邊一個(gè)數(shù)一定是在其之前兩個(gè)數(shù)的和。
在數(shù)學(xué)上,斐波納挈數(shù)列可以以這樣的公式表示:F(0) = 0,F(xiàn)(1) = 1 ,F(xiàn)(n) = F(n-1) + F(n-2),(n=2)
用遞歸方法求斐波那契數(shù)列的2,2,4,6,10,16,26,42,68,110······的第10項(xiàng)
方法1:
#include "stdio.h"
int fbnq(int d1,int d2,int n)
{
int k;
if(n3)
{
printf("%d,",d2);
return fbnq(d2,d1+d2,n-1);
}
else
{
printf("%d,",d2);
return d1+d2;
}
}
int main()
{
int d1,d2,n;
d1=2;d2=2;n=10;
/*printf("輸入項(xiàng)數(shù):");
scanf("%d",n);printf("輸入前兩項(xiàng):");
scanf("%d %d",d1,d2);*/
printf("%d,",d1);
printf("%d",fbnq(d1,d2,10));
}
方法2:
#include "stdio.h"
int fbnq(int d[],int n)
{
int k;
if(n3)
{
printf("%d,",d[0]+d[1]);
d[1]=d[0]+d[1];d[0]=d[1]-d[0];
return fbnq(d,n-1);
}
else
return d[0]+d[1];
}
int main()
{
int d[2],n;
d[0]=2;d[1]=2;n=10;
/*printf("輸入項(xiàng)數(shù):");
scanf("%d",n);printf("輸入前兩項(xiàng):");
scanf("%d %d",d[0],d[1]);*/
printf("%d,%d,",d[0],d[1]);
printf("%d",fbnq(d,10));
}
分享題目:go語言遞歸斐波那契數(shù)列 go 斐波那契數(shù)列
網(wǎng)頁URL:http://fisionsoft.com.cn/article/hpiohc.html