java.lang.StackOverflowError的问题

很简单的一段代码,也知道是哪里错误,就是不明白为什么,希望大侠们指教指教
当调用main.drop(6000) 就报错了, drop(int times)方法里调用了自身的方法,这样为什么会导致报错呢

```public class Main {
private double TotalHeight = 100;
private double CurHeight = 50;

public void drop(int times) {
if ((times - 1) == 0) {
return;
}

setTotalHeight(getTotalHeight() + 2 * getCurHeight());
setCurHeight(getCurHeight() / 2);

drop(times - 1);
}

public double getTotalHeight() {
return TotalHeight;
}

public void setTotalHeight(double totalHeight) {
TotalHeight = totalHeight;
}

public double getCurHeight() {
return CurHeight;
}

public void setCurHeight(double curHeight) {
CurHeight = curHeight;
}

public static void main(String[] args) {
Date startDate = new Date();

Main main = new Main();

main.drop(50000); // 此处达到6000的时候就报标题上面的错误

System.out.println("Total height is " + main.getTotalHeight());
System.out.println("Current height is " + main.getCurHeight());
}
}


3个回答

递归太深了,stack分配给递归的空间是有限的,如果你的递归太深,stack耗尽,就会报堆栈溢出

gudejundd
dezun 递归和循环有什么区别嘛 ,感觉循环能达到递归的效果
接近 6 年之前 回复

你是想写个小球弹跳的递归?

u012169499
Heart-Attack 回复gudejundd: 可以参考http://zhidao.baidu.com/link?url=XWaFsHaV9R9cmlTmbCniSED4n8by0YqtHbQRYw9e5rzP9JShCT06FsxT63SnaUyoxEPltPMozfO5Dog2p4wOj_
接近 6 年之前 回复
u012169499
Heart-Attack 回复gudejundd: 代码贴出来了,不懂可以问我,我试了下你的代码,具体问题还要再看看
接近 6 年之前 回复
gudejundd
dezun 嗯 是看的别人的代码,感觉有问题,又说不出问题如何产生的
接近 6 年之前 回复

我刚写了一个,同样是实现你这个的功能
/**
*
* @param count 弹跳次数
* @return 返回第count次弹起的高度
/
public static double high(int count){
if(count==1){return 50;}
return high(count-1)/2;
}
/
*
*
* @param count 弹跳次数
* @return 第count次弹跳结束时经过的路程
*/
public static double totalHigh(int count){
if(count==1){return 100+high(count)*2;}//第一次弹跳结束时经过的路程
return totalHigh(count-1)+high(count-1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入弹跳次数:");
int count = sc.nextInt();
System.out.println("第"+count+"次弹跳高度为:"+high(count)+"米");
System.out.println("第"+count+"次弹完总路程为:"+totalHigh(count)+"米");

}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐