❶ 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'); } }