導航:首頁 > 源碼編譯 > java什麼是遞歸演算法

java什麼是遞歸演算法

發布時間:2022-07-24 13:06:46

java中遞歸的作用是什麼為什麼要用到遞歸

你的兩個問題其實是一個問題,對吧。
遞歸的作用:遞歸演算法可以解決一些通過遞歸定義的題目。
首先需要明白什麼是遞歸定義的題目,通俗一點來說就是一個大問題中蘊含著小問題,而小問題同時又與大問題的結構相同,只是規模更小。
比如n階乘的定義可以理解為:
n!= n*(n-1)!
從上面不難看出 (n-1)! 就是比n! 規模更小的問題,按照此方法不斷分解下去,就能得到最初的一些基本的已知的數據。然後反過來就可以求出最終的結果了。
n的階乘演算法如下:
private static int jieCheng(int n) {
if(n == 1)
return 1;
else {
return n*jieCheng(n-1);
}
}
還有就是數據結構中二叉樹的定義,也是遞歸定義的。因此二叉樹的好多操作都是通過遞歸實現的。
用遞歸會使程序相當簡潔。

❷ java 遞歸 定義是什麼請舉出個簡單的例子,謝謝

一個類的定義方法:
public class Node
{
int value;
Node next;
以下有一些set,get方法及構造方法
}
一個類的成員是當前類

一個方法:
public int f(int n)
{
if(n<=1)
return 1;
else
return n+f(n-1);
}
以上是求1-n的累加
該方法調用了該方法自己

❸ JAVA如何理解遞歸

//這個是一個使用遞歸演算法求某數階乘的例子
//如果求5的階乘,即求5*4*3*2*1
//即5×4的階乘……如此類推

public class Test {//主類

public static void main(String[] args) {//主方法

System.out.print(Test.digui(5));//調用用於求階乘的靜態方法

}

public static int digui(int i){//求階乘的方法,接收一個整數,求該數的階乘

if(i==1){//當該數是1時,是遞歸的出口,遞歸一定要先設置出口,避免無限循環

return 1;

}else{

return i*digui(i-1); //這里就是遞歸,即方法調用自身。

}
}

}

❹ java中遞歸演算法是什麼怎麼算的

一、遞歸演算法基本思路:

Java遞歸演算法是基於Java語言實現的遞歸演算法。遞歸演算法是一種直接或者間接調用自身函數或者方法的演算法。遞歸演算法實質是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進行思維。

二、遞歸演算法解決問題的特點:

【1】遞歸就是方法里調用自身。

【2】在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。

【3】遞歸演算法代碼顯得很簡潔,但遞歸演算法解題的運行效率較低。所以不提倡用遞歸設計程序。

【4】在遞歸調用的過程中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等,所以一般不提倡用遞歸演算法設計程序。

【5】在做遞歸演算法的時候,一定把握出口,也就是做遞歸演算法必須要有一個明確的遞歸結束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。

三、代碼示例:

publicclassFactorial{

//thisisarecursivefunction

intfact(intn){

if(n==1)return1;

returnfact(n-1)*n;

}}
publicclassTestFactorial{publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Factorialfactorial=newFactorial();

System.out.println("factorial(5)="+factorial.fact(5));

}
}

代碼執行流程圖如下:

此程序中n=5就是程序的出口。

❺ java中,遞歸什麼方法怎麼用

public static void main(String args[]) {
System.out.println(plus(3));

static int count = 0;

public static int plus(int i) {
if (i > 10) {
} else {
count = i + plus(i + 1);
}
//System.out.println(count);
return count;
}
這就是一個最簡單的遞歸

❻ java中遞歸演算法是怎麼算的

1.漢諾塔問題
import javax.swing.JOptionPane;
public class Hanoi {
private static final String DISK_B = "diskB";
private static final String DISK_C = "diskC";
private static final String DISK_A = "diskA";
static String from=DISK_A;
static String to=DISK_C;
static String mid=DISK_B;
public static void main(String[] args) {
String input=JOptionPane.showInputDialog("please input the number of the disks you want me move.");
int num=Integer.parseInt(input);
move(num,from,mid,to);
}
private static void move(int num, String from2, String mid2, String to2) {
if(num==1){
System.out.println("move disk 1 from "+from2+" to "+to2);
}
else {
move(num-1,from2,to2,mid2);
System.out.println("move disk "+num+" from "+from2+" to "+to2);
move(num-1,mid2,from2,to2);
}
}
}
2. 這是一個排列的例子,它所做的工作是將輸入的一個字元串中的所有元素進行排序並輸出,例如:你給出的參數是"abc" 則程序會輸出:
abc
acb
bac
bca
cab
cba
(1)演算法的出口在於:low=high也就是現在給出的排列元素只有一個時。
(2)演算法的逼近過程:先確定排列的第一位元素,也就是循環中i所代表的元素,
然後low+1開始減少排列元素,如此下去,直到low=high
public static void permute(String str) {
char[] strArray = str.toCharArray();
permute(strArray, 0, strArray.length - 1);
}
public static void permute(char[] list, int low, int high) {
int i;
if (low == high) {
String cout = "";
for (i = 0; i<= high; i++)
cout += list[i];
System.out.println(cout);
} else {
for (i = low; i<= high; i++) {
char temp = list[low];
list[low] = list[i];
list[i] = temp;
permute(list, low + 1, high);
temp = list[low];
list[low] = list[i];
list[i] = temp;
}
}
}
3。這是一個組合的例子,與上述的例子相似,只是它所做的工作是,輸出所給字元串中制定數目的元素的組合種類
(1)程序出口在於n=1,此時只要輸出目標數組的所有元素即可
(2)逼近過程,當n>1的時候,我們先取第一個元素放入目標數組中,然後n-1,如此下去,最後出來。
import javax.swing.JOptionPane;
public class Combination {
/**
* @param args
*/
public static void main(String[] args) {
String input = JOptionPane.showInputDialog("please input your String: ");
String numString = JOptionPane.showInputDialog("please input the number of your Combination: ");
int num = Integer.parseInt(numString);
Combine(input, num);
}
private static void Combine(String input, int num) {
char[] a = input.toCharArray();
String b = "";
Combine(a, num, b, 0, a.length);
}
private static void Combine(char[] a, int num, String b, int low, int high) {
if (num == 0) {
System.out.println(b);
} else {
for (int i = low; i<a.length; i++) {
b += a[i];
Combine(a, num - 1, b, i+1, a.length);
b=b.substring(0, b.length()-1);
}
}
}
}

❼ JAVA中的遞歸方法,求講一下。

自己調用自己或幾個方法相互調用。

最經典的是求正整數階的演算法:

int fact(int i){

if(i<=1)return 1;

return fact(i-1)*i;

}

多數遞歸方法可以轉換成非遞歸方法。

一般同功能的非遞歸方法,執行效率要優於遞歸方法。但合理的使用遞歸方法,可以使代碼結構更清晰,更有可讀性,從而更方便維護。

❽ 用java遞歸方法實現

publicintfun(intn){
if(n==0||n==1)return1;
returnn*fun(n-1);
}

❾ java遞歸演算法,怎麼理解

n!=(n-1)*n!
簡單理解,就是目前的所有任務,等於前面所有的任務+現在的任務。
比如你求1。。。100的加法總和
實際上是1...99的加法總和+100就是了。
這就是遞歸的來源。
你只需要計算你前一步的任務,然後加上自己,就OK了。
前一步,在再次調用前前一步......

❿ 請問大家java中遞歸演算法,希望有詳細解釋

publicclassTest{
publicstaticintresult(intparameter){
if(parameter<=1)return1;//判斷parameter是否小於等於1,如果不成立則遞歸調用
intnumber=parameter*result(parameter-1);//將parameter-1繼續調用函數反復如此,直至條件成立。
returnnumber;
}
publicstaticvoidmain(String[]args{
intresult=result(5);
System.out.println(result);
}
}

它的執行原理是如下這樣的:

result(5) 初始時 ==》進入函數體判斷parameter是否小於等於1,此時parameter等於5,條件不成立,執行parameter*result(parameter-1) 即5*result(5-1),程序反復執行。。。

5*result(5-1)

4*result(4-1)

3*result(3-1)

2*result(2-1) 到此 parameter等於1符合條件 函數返回1,層層返回。即:

result(1) =1

2*result(1)=2*1=2

3*result(2)=3*2=6

4*result(3)=4*6=24

5*result(4)=5*24=120

閱讀全文

與java什麼是遞歸演算法相關的資料

熱點內容
3d列印機的演算法原理 瀏覽:479
騰訊雲通信伺服器 瀏覽:887
minecraft最可怕伺服器地址 瀏覽:274
程序員選專業有必要嗎 瀏覽:32
如何重裝rpc伺服器 瀏覽:637
程序員必備的app 瀏覽:167
電動汽車加密幣 瀏覽:962
xp支持多少層文件夾 瀏覽:650
阿里雲伺服器防禦指標 瀏覽:895
cc網路編程學習 瀏覽:460
單片機又叫微控制器對嗎 瀏覽:662
安卓軟體商店如何評分 瀏覽:657
linuxexecv 瀏覽:616
蘋果照片視頻文件夾 瀏覽:392
cdes加密解密演算法 瀏覽:752
app發版如何讓運營及時配活動 瀏覽:801
python結束界面 瀏覽:485
貴州兒童編程培訓 瀏覽:535
非對稱型密碼演算法 瀏覽:691
安卓qq分享屏幕怎麼分享電視聲音 瀏覽:937