很简单的一段代码,也知道是哪里错误,就是不明白为什么,希望大侠们指教指教
当调用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());
}
}
递归太深了,stack分配给递归的空间是有限的,如果你的递归太深,stack耗尽,就会报堆栈溢出
我写了一个,同样是实现你这个的功能
/**
*
* @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)+"米");
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。