當前位置:首頁 » 編程語言 » java遞歸函數

java遞歸函數

發布時間: 2022-01-14 12:43:38

『壹』 關於java中遞歸函數的問題

lz
if(!isDone) {判斷的是isDone不是方法的帶進來的參數true,所以,方法是肯定要進行的,可能是isDone在方法執行中並沒有修改成true,所以依然會跳進方法中

『貳』 java遞歸方法,求助!

一般遞歸只實現一個方向的邏輯,把兩個方向的邏輯放到一方法里並不好,不容易控制,實現也很麻煩,考慮到維護時的難度請不要在實際項目中使用。
搞了好一會,搞出個這樣的輸出2N-1行星號,中間最長的一行不重復,如果樓主希望重復中間一行,可以對代碼做一點點改動。
/**
* 入口,傳入N
*/
public static void printStar(int number){
printStar2(number, number, 1);
}

/**
*
* @param number 給定的N
* @param oldNumber 給定的N
* @param direction 遞歸時的方向
*/
public static void printStar2(int number,int oldNumber, int direction){
if(number==0)direction++;
String s="";
int i = number;
if(direction==1){
for(;i<oldNumber;i++){
s+="*";
}
number--;
}else{
for(;i<oldNumber;i++){
s+="*";
}
number++;
if(number>oldNumber){
return;
}
}

printStar2(number,oldNumber,direction);
System.out.println(s);
}

『叄』 Java的遞歸方法

橫線填:d2b(n/2);

『肆』 java中遞歸演算法是什麼怎麼算的

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

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

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

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

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

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

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

三、代碼示例:

代碼執行流程圖如下:

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

『伍』 用java遞歸方法實現

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

『陸』 JAVA中能夠實現方法的遞歸調用嗎如何實現

能 遞歸函數即自調用函數,在函數體內直接或間接的調用自己,即函數的嵌套是函數本身。遞歸調用又分為直接調用和間接調用
直接調用funca(){ ...... funca();};間接調用;funca(){ ...... funcb();}funcb(){ ..... funca(); .....} 漢諾塔源碼public class HanoiY { void Move(char chSour,char chDest){ System.out.println("Move the top plate of "+chSour+"-->"+chDest); } void Hanoi(int n,char chA,char chB,char chC) { if(n==1) Move(chA,chC); else { Hanoi(n-1,chA,chC,chB); this.Move(chA,chC); Hanoi(n-1,chB,chA,chC); } } public static void main(String[] args) { int n=Integer.parseInt(args[0]); HanoiY han=new HanoiY(); han.Hanoi(n,'A','B','C'); } }

『柒』 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方法遞歸調用

python">1.當n=1時,返回1
2.當n>1時,返回n+(n-1)

最簡單的了,還有個有名的數列遞歸叫做「斐波那契」數列遞歸

『拾』 在Java中,怎樣用遞歸函數實現0到9的輸出

給你程序里填空的地方加上這句話就OK了 :
if(begin>end) return;
因為填空的這句話肯定是判斷的, 一般的if肯定不行, 因為只能一行。
方法結束一般有如下情況: 執行完畢, 遇到return, 或者拋出未捕獲的異常。
你這屬於第二種情況,因為方法f是void 的 無返回的,所以就寫 return; 是不是什麼都沒有返回呢。而且也達到了符合條件(begin>end)就結束方法的目的呢。。

熱點內容
qt資源圖片編譯 發布:2024-11-15 16:59:26 瀏覽:665
編譯選項保護范圍最廣 發布:2024-11-15 16:57:47 瀏覽:605
c語言中的除號 發布:2024-11-15 16:51:09 瀏覽:215
安卓ops是什麼文件 發布:2024-11-15 16:32:18 瀏覽:927
雙線性插值演算法c 發布:2024-11-15 16:30:45 瀏覽:866
c語言和vc的區別 發布:2024-11-15 16:19:23 瀏覽:118
linux是免費的嗎 發布:2024-11-15 15:53:44 瀏覽:617
多控存儲 發布:2024-11-15 15:52:42 瀏覽:283
一年級數學分解演算法 發布:2024-11-15 15:41:08 瀏覽:411
安卓個人熱點怎麼分享 發布:2024-11-15 15:40:16 瀏覽:264