免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
「干貨」C語(yǔ)言經(jīng)典算法——費(fèi)式數(shù)列,一個(gè)數(shù)兔子算法

小編是一個(gè)有著6年工作經(jīng)驗(yàn)的工程師,關(guān)于C++編程,自己有做材料的整合,一個(gè)完整的C++編程學(xué)習(xí)路線,學(xué)習(xí)資料和工具,能夠進(jìn)我的群10048,-83029收取,免費(fèi)送給大家,希望你也能憑著自己的努力,成為下一個(gè)優(yōu)秀的程序員

背景說(shuō)明

Fibonacci為1200年代的歐洲數(shù)學(xué)家,在他的著作中曾經(jīng)提到:「若有一只免子每個(gè)月生一只小免子,一個(gè)月后小免子也開始生產(chǎn)。起初只有一只免子,一個(gè)月后就有兩只免子,二個(gè)月后有三只免子,三個(gè)月后有五只免子(小免子投入生產(chǎn))......。

如果不太理解這個(gè)例子的話,舉個(gè)圖就知道了,注意新生的小免子需一個(gè)月成長(zhǎng)期才會(huì)投入生產(chǎn),類似的道理也可以用于植物的生長(zhǎng),這就是Fibonacci數(shù)列,一般習(xí)慣稱之為費(fèi)氏數(shù)列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89......

算法說(shuō)明

仔細(xì)觀察這個(gè)數(shù)列,會(huì)發(fā)現(xiàn),除了第1個(gè)數(shù)和第2個(gè)數(shù)除外,從第3個(gè)數(shù)開始,第N個(gè)數(shù)等于它前面兩個(gè)數(shù)之和,也就是這個(gè)數(shù)列的通項(xiàng)公式為f(n)=f(n-1)+f(n-2) (n>=2,n∈正整數(shù))。

解法

這道題,就像是我們高中時(shí)的數(shù)學(xué)題,就是給一個(gè)背景,然后算第N項(xiàng)或者前N項(xiàng)和。

我們一般的步驟都是先找數(shù)列的關(guān)系,然后推導(dǎo)出它的通項(xiàng)公式,在求解。而費(fèi)氏數(shù)列的通項(xiàng)公式就是如下:

① f(n)=n,(n<=1,n∈正整數(shù))

② f(n)=f(n-1)+f(n-2) (n>=2,n∈正整數(shù))

所以,根據(jù)這個(gè)通項(xiàng)公式,我們就可以求解了。

public class 費(fèi)式數(shù)列 {

/**

* @author Helen

* Nov 21, 2014 10:30:46 AM

* @param args

* void

* TODO

*/

public static void main(String[] args) {

int n;

Scanner input=new Scanner(System.in);

System.out.println('請(qǐng)輸入N:');

n=input.nextInt();

input.close();

long t=System.currentTimeMillis();

cal(n);

System.out.println();

System.out.println('cal耗時(shí):'+(System.currentTimeMillis()-t));

t=System.currentTimeMillis();

for (int i = 1; i < n; i++) {

System.out.print(cal2(i)+',');

}

System.out.println();

System.out.println('cal2耗時(shí):'+(System.currentTimeMillis()-t));

}

public static void cal(int n){

int[] Fib=new int[n];

//f(n)=n,if n=0,n=1

Fib[0]=0;

Fib[1]=1;

//f(n)=f(n-1)+f(n-2),if n>=2

for (int i = 2; i < Fib.length; i++) {

Fib[i]=Fib[i-1]+Fib[i-2];

}

for (int i : Fib) {

System.out.print(i+',');

}

}

/**

*

* @author Helen

* Nov 21, 2014 11:13:56 AM

* @param n

* @return

* int

* TODO 遞歸(耗時(shí))

*/

public static int cal2(int n){

if(n==0||n==1){

return n;

}else{

return cal2(n-1)+cal2(n-2);

}

}

}

第一種是常規(guī)算法,每次都將計(jì)算后的數(shù)保存到一個(gè)數(shù)組里面,這樣在計(jì)算第N個(gè)數(shù)的時(shí)候就可以從數(shù)組里直接取出第N-1和第N-2的數(shù)了;

第二種遞歸算法是比較耗時(shí)的,可以看出第二種每次計(jì)算第N個(gè)數(shù)時(shí),它都要從第0(或1)個(gè)開始算起。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java排序算法
RandomAccess接口
循環(huán)?還是遞歸?
遞歸算法
迭代算法與遞歸算法的概念及區(qū)別(2)
程序員還不知道遞歸優(yōu)化的這三種方式?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服