Java遞歸實(shí)現(xiàn)斐波那契數(shù)列
程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。 一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時,遞歸前進(jìn);當(dāng)邊界條件滿足時,遞歸返回?!@是百度百科說的。
其實(shí)說白了,就是遞歸方法本身調(diào)用自己而進(jìn)行的運(yùn)算,下面舉個例子說明一下這個例子就是很著名的——斐波那契數(shù)列。
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……
可以看出來第三個數(shù)就是前面兩個數(shù)相加從而得到的。
如果使用正常的循環(huán)進(jìn)行解決的話就是這樣:
public class FeiBo{
public static void main(String[] args) {
int num1=0;
int num2=1;
int numn=1;
int n=10;
for (int i = 3; i <=n; i++) {
numn=num1+num2;
num1=num2;
num2=numn;
}
System.err.println(n+"個數(shù)的結(jié)果為:"+numn);
}
}
運(yùn)行結(jié)果為:
10個數(shù)的結(jié)果為:34
這是使用正常的循環(huán)方法進(jìn)行運(yùn)算,如果使用遞歸的話就是一下這樣:
public static int Recursion(int n){
if(n==1){
return 0;
}
if(n==2){
return 1;
}
return Recursion(n-1)+Recursion(n-2);
}
遞歸需要結(jié)束條件,到情況下遞歸就不需要繼續(xù)調(diào)用,結(jié)束遞歸。上面案例結(jié)束條件就是當(dāng)n=1或者2的時候,就返回0或者1,而不是繼續(xù)調(diào)用遞歸方法本身了。
遞歸最主要的兩個條件就是,自己調(diào)用自己,結(jié)束遞歸的條件。
因為遞歸是自己調(diào)用自己所以浪費(fèi)資源大,運(yùn)行時間比循環(huán)長很多,運(yùn)行慢,效率底。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java打印斐波那契前N項的實(shí)現(xiàn)示例
- Java利用遞歸算法實(shí)現(xiàn)查詢斐波那契數(shù)
- JAVA遞歸與非遞歸實(shí)現(xiàn)斐波那契數(shù)列
- 三種java編程方法實(shí)現(xiàn)斐波那契數(shù)列
- 遞歸之斐波那契數(shù)列java的3種方法
- java編程經(jīng)典案例之基于斐波那契數(shù)列解決兔子問題實(shí)例
- java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法
- java實(shí)現(xiàn)斐波那契數(shù)列的3種方法
- SpringBoot搭建Dubbo項目實(shí)現(xiàn)斐波那契第n項詳解
相關(guān)文章
SpringBoot內(nèi)置tomcat參數(shù)調(diào)優(yōu)的實(shí)現(xiàn)
springboot內(nèi)置了tomcat, 并給我們設(shè)置了默認(rèn)參數(shù), 我們怎么樣修改springboot內(nèi)置的tomcat參數(shù),本文就詳細(xì)的來介紹一下,感興趣的可以了解一下2023-09-09
java實(shí)現(xiàn)遍歷樹形菜單兩種實(shí)現(xiàn)代碼分享
這篇文章主要介紹了java實(shí)現(xiàn)遍歷樹形菜單兩種實(shí)現(xiàn)代碼分享,兩種實(shí)現(xiàn):OpenSessionView實(shí)現(xiàn)、TreeAction實(shí)現(xiàn)。具有一定參考價值,需要的朋友可以了解下。2017-11-11
java 中使用匿名類直接new接口詳解及實(shí)例代碼
這篇文章主要介紹了java 中使用匿名類直接new接口詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
springboot集成mybatis-maven插件自動生成pojo的詳細(xì)教程
這篇文章主要介紹了springboot集成mybatis-maven插件自動生成pojo的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
SpringCloud搭建Eureka服務(wù)模塊的過程
Eureka在分布式系統(tǒng)中起到了連接各個微服務(wù)的紐帶作用,使得服務(wù)之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導(dǎo)讀者完成Eureka服務(wù)模塊的搭建,感興趣的朋友跟隨小編一起看看吧2024-02-02
Java基于阻塞隊列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型示例詳解
這篇文章主要介紹了Java基于阻塞隊列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型,阻塞隊列的特點(diǎn)就是阻塞兩個字,阻塞功能使得生產(chǎn)者和消費(fèi)者兩端的能力得以平衡,當(dāng)有任何一端速度過快時,阻塞隊列便會把過快的速度降下來,感興趣的朋友可以參考下2023-12-12

