溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中怎么創(chuàng)建遞歸例子

發(fā)布時間:2020-10-24 14:05:13 來源:億速云 閱讀:141 作者:小新 欄目:編程語言

這篇文章主要介紹java中怎么創(chuàng)建遞歸例子,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)建java遞歸的方法:首先創(chuàng)建明確的遞歸結(jié)束條件;然后設(shè)置判斷條件,代碼為【private static int sumNum(int n){if (n == 1){return 1;}return n + sumNum(n-1)}】。

創(chuàng)建java遞歸的方法:

程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。 一個過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時,遞歸前進(jìn);當(dāng)邊界條件滿足時,遞歸返回。

首先,我們來看一下最簡單的求和例子。

<span style="font-size:18px;">public static void main(String[] args) {
System.out.println(sumNum(100)); //輸出:5050
}
//求1-100的和
private static int sumNum(int n) {
if (n == 1) {
return 1;
}
return n + sumNum(n-1);
}</span>

下面我們用遞歸實現(xiàn)斐波那契數(shù)列。

斐波那契數(shù)列,又稱黃金分割數(shù)列,指的是這樣一個數(shù)列:0、1、1、2、3、5、8、13、21、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞歸的方法定義:F(0)=0,F(xiàn)(1)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在現(xiàn)代物理、準(zhǔn)晶體結(jié)構(gòu)、化學(xué)等領(lǐng)域,斐波納契數(shù)列都有直接的應(yīng)用。

//用遞歸求解
public static int fib(int n) {
if (n == 0)
return 0;
if (n == 1 || n == 2)
return 1;
return fib(n - 1) + fib(n - 2);
}
//用循環(huán)求解
public static int fib2(int n) {
int a = 0, b = 1, c = 1;
if (n == 0)
return 0;
if (n == 1 || n == 2)
return 1;
for (int i = 0; i < n - 1; i++) {
c = a + b;
a = b;
b = c;
}
return c;
}
//用數(shù)組求解
public static int fib3(int n) {
int[] arr = new int[n + 1];
arr[0] = 0;
arr[1] = 1;
for (int i = 2; i <= n; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}

下面再來看一下另外一個例子,計算階乘。

階乘是基斯頓·卡曼(Christian Kramp,1760~1826)于 1808 年發(fā)明的運算符號,是 數(shù)學(xué)術(shù)語。

一個正整數(shù)的 階乘( 英語: factorial)是所有小于及等于該數(shù)的 正整數(shù)的 積,并且有0的階乘為1。 自然數(shù)n的階乘寫作n!。 亦即n!=1×2×3×...×n。階乘亦可以 遞歸 方式定義:0!=1,n!=(n-1)!×n。

//用遞歸計算階乘
public static int jc(int n)
{
//結(jié)束條件
if ( n == 1)
return 1;
//遞歸條件
return n * jc(n-1);
}
//用for循環(huán)實現(xiàn)階乘
public static int jc2(int n)
{
int sum = 1;
for (int i = 1; i <= n; i++) {
sum *= i;
}
return sum;
}

遞歸的條件:

1、 結(jié)束條件: 必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。

2、 遞歸條件: 遞歸的運算法則.

遞歸的特點:

1、簡潔明了: 遞歸算法,一般讓人一眼就能看出運算結(jié)構(gòu),很接近于數(shù)學(xué)自然語言。

2、內(nèi)存消耗大:在遞歸調(diào)用的過程當(dāng)中系統(tǒng)為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等。所以一般不提倡用遞歸算法設(shè)計程序。

以上是java中怎么創(chuàng)建遞歸例子的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI