❶ java怎麼退出所有遞歸
比如這是一個遞歸:x0dx0apublic int a(int p){x0dx0a ...x0dx0ax0dx0a p--;x0dx0ax0dx0a a(p);x0dx0ax0dx0a ...x0dx0ax0dx0a}x0dx0ax0dx0a那麼我想要退出遞歸時:x0dx0apublic int a(int p){x0dx0a ...x0dx0ax0dx0a if(p == 0){x0dx0ax0dx0a throw new Exception("blahblah"); //拋出異常x0dx0ax0dx0a }x0dx0ax0dx0a p--;x0dx0ax0dx0a a(p);x0dx0ax0dx0a ...x0dx0ax0dx0a}x0dx0a調用這個遞歸時:x0dx0apublic static void main(String[] args){x0dx0a try{x0dx0a a(2);x0dx0ax0dx0a }catch(Exception e){x0dx0a //拋出異常後執行x0dx0ax0dx0a }x0dx0ax0dx0a}x0dx0a簡單來說就是拋出異常後會執行catch內的語句,與遞歸本身的返回值無關。
❷ java怎麼退出所有遞歸
比如這是一個遞歸:
public int a(int p){
...
p--;
a(p);
...
}
那麼我想要退出遞歸時:
public int a(int p){
...
if(p == 0){
throw new Exception("blahblah"); //拋出異常
}
p--;
a(p);
...
}
調用這個遞歸時:
public static void main(String[] args){
try{
a(2);
}catch(Exception e){
//拋出異常後執行
}
}
簡單來說就是拋出異常後會執行catch內的語句,與遞歸本身的返回值無關。
❸ java如何一次性退出所有遞歸
在內的循環里把外層循環的條件都破掉就可以了啊 ,java好像是不帶標記的循環
❹ 在JAVA中什麼是遞歸有什麼用
Java方法遞歸是指在一個方法的內部調用自身的過程,以此類推就是java方法遞歸的理解思想,具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函數實現時,因為解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況。另外這個解決問題的函數必須有明顯的結束條件,這樣就不會產生無限遞歸的情況了。因此,java方法遞歸的兩個條件就是,一通過遞歸調用來縮小問題規模,且新問題與原問題有著相同的形式;二存在一種簡單情境,可以使遞歸在簡單情境下退出。
❺ java怎麼退出所有遞歸
publicclassMain{
publicstaticvoidmain(Stringargs[]){
System.out.println("start!");
try{
find(0);
}catch(StopMsgExceptione){
System.out.println(e);
}
System.out.println("done!");
}
privatestaticvoidfind(intlevel){
if(level>10){
//跳出
thrownewStopMsgException();
}
//執行操作
System.out.println(level);
//遞歸
find(level+1);
}
{
}
}
❻ java堆棧溢出-遞歸
程序邏輯中永遠跳不出遞歸調用,因為在test中所有邏輯分支中都是往下遞歸調用,沒有終止的邏輯步驟。和方法自己調用自己沒有區別。
需要在某個邏輯分支中返回(終止遞歸)。
❼ java遞歸的優點缺點
遞歸好處:代碼更簡潔清晰,可讀性更好
遞歸可讀性好這一點,對於初學者可能會反對。實際上遞歸的代碼更清晰,但是從學習的角度要理解遞歸真正發生的什麼,是如何調用的,調用層次和路線,調用堆棧中保存了什麼,可能是不容易。但是不可否認遞歸的代碼更簡潔。一般來說,一個人可能很容易的寫出前中後序的二叉樹遍歷的遞歸演算法,要寫出相應的非遞歸演算法就比較考驗水平了,恐怕至少一半的人搞不定。所以說遞歸代碼更簡潔明了。
遞歸壞處:由於遞歸需要系統堆棧,所以空間消耗要比非遞歸代碼要大很多。而且,如果遞歸深度太大,可能系統撐不住。
個人覺得:非必要時不遞歸
❽ java遞歸方法里有for循環,for循環里又調用這個遞歸方法是否可以
可以 你自己注意循環 和遞歸結束條件 不要進入死循環
❾ 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'); } }