黑马程序员技术交流社区
标题:
关于递归太深引发栈溢出异常问题!!!求解!
[打印本页]
作者:
聂益飞
时间:
2013-3-28 21:27
标题:
关于递归太深引发栈溢出异常问题!!!求解!
class Ticket
{
static int ticket = 100;
Ticket t = new Ticket();
static void sale()
{
System.out.println("ticket num is :" + ticket--);
}
public static void main(String[] args)
{
//当用对象调用sale()时,出现StackOverflowError,栈溢出错误
new Ticket().sale();
//而当直接使用静态的方式,直接调用sale()时,就不报错,?
//sale();
}
}
复制代码
作者:
刘胜寒
时间:
2013-3-28 21:36
加个判断结束的...你的没有控制结束语句,if(ticket<=0) return ;就不会一直递归下去了
作者:
夏振博
时间:
2013-3-28 21:48
本帖最后由 夏振博 于 2013-3-28 22:08 编辑
递归最不可缺的是递归的出口 ,就是在什么情况下让它停止递归
正好昨天晚上帮朋友讲递归时写的代码 5*4*3*2*1=?你可以研究下
你这代码我真心没搞明白,Ticket t = new Ticket();干嘛用的,想递归?你代码溢出就是因为这段代码,不断的调用自己到这里就调用,下面的代码一直都没执行
public class Demo {
public static void main(String[] args) {
System.out.println(Demo.diGui(5));
}
private static int diGui(int i){
if(i==1)return 1;//这就是出口
else return i*diGui(i-1);
}
}
复制代码
作者:
张豪杰
时间:
2013-3-28 22:00
我差点都被你绕过去了
你自己仔细观察下你的代码
第四行, Ticket t = new Ticket();
你在类的内部创建了一个本类对象
所以你在main函数中,new一个对象的时候,jvm会开始加载类进内存,遇到Ticket t = new Ticket();这个语句,又创建一个新的对象。。。。递归的是这个部分
跟你有没有调用sale()方法无关!
作者:
VOIDMAIN
时间:
2013-3-29 22:58
递归一定要有出口,一个重要原则就是递归要向已知方向递归;
作者:
陈原野
时间:
2013-3-29 23:13
递归也就是函数自身调用自身的编程手法或者表现形式
递归注意事项:
1.限定条件
2.要注意递归的次数,尽量避免内存溢出.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2