今天上網(wǎng)看到一個(gè)有關(guān)“斐波那契數(shù)列”的數(shù)學(xué)概念。自己學(xué)習(xí)編程時(shí)間也不短了,就借這個(gè)東東練習(xí)一下。
專(zhuān)注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)站前免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
斐波那契數(shù)列,又稱(chēng)黃金分割數(shù)列,指的是這樣一個(gè)數(shù)列:1、1、2、3、5、8、13、21、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞歸的方法定義:F0=0,F(xiàn)1=1,F(xiàn)n=F(n-1)+F(n-2)(n>=2,n∈N*)(來(lái)自百度)
一開(kāi)始,我編程的代碼如下:
functionfbnq($num) {
if($num==0) {
return0;
}elseif($num==1) {
return1;
}else{
returnfbnq($num-2) + fbnq($num-1);
}
}
$total=10;
$arr=array();
for($i=0;$i<$total;$i++) {
$arr[$i] = fbnq($i);
echo $i.'--->'. $arr[$i] .'
';
}
編好以后,我想OK了,結(jié)果把$tatal改到25以后就發(fā)現(xiàn)運(yùn)行越來(lái)越慢了。運(yùn)行到30秒程序就提示運(yùn)行時(shí)間太長(zhǎng)了??赡苁呛瘮?shù)設(shè)計(jì)的效率問(wèn)題。因?yàn)橐婚_(kāi)始我考慮用遞歸,n大于3以后,每個(gè)數(shù)都要通過(guò)遞歸來(lái)獲得。越往后,遞歸次數(shù)越多。實(shí)際上,根本不需要用到遞歸。只需要取前面已經(jīng)做好的運(yùn)算結(jié)果相加就好了。于是,改為以下代碼,$tata改為100也沒(méi)問(wèn)題了:
functionfbnq($num) {
global$arr;
if($num==0) {
return0;
}elseif($num==1) {
return1;
}else{
return$arr[$num-2] +$arr[$num-1];
}
}
$total=100;
$arr=array();
for($i=0;$i<$total;$i++) {
$arr[$i] = fbnq($i);
echo $i.'--->'. $arr[$i] .'
';
}