递归和栈溢出

本文详细解析了一个使用递归实现的打印序列程序在处理不同数值时的性能表现,特别是当数值从10000增加到20000时,程序如何遭遇栈溢出错误。通过分析,揭示了递归调用对内存空间的高要求,并提供了理解及避免此类问题的策略。

递归对内存空间得要求很高,递归很容易造成栈溢出


public static void printN2(int N){
if (N>0){
printN2(N-1);
System.out.printf("%1$-2d",N);
}
}

@Test
public void testPrintN2() throws Exception {
long ms1 = Calendar.getInstance().getTimeInMillis();
Misc.printN2(10000);
long ms2 = Calendar.getInstance().getTimeInMillis();
System.out.println();
System.out.println(ms2-ms1);

}
这样得一个测试程序,在设置N为10000时可以跑完,但在设置N为20000以上就会报栈溢出得错误

java.lang.StackOverflowError
at com.scarlett.bowling.Misc.printN2(Misc.java:15)
at com.scarlett.bowling.Misc.printN2(Misc.java:16)
at com.scarlett.bowling.Misc.printN2(Misc.java:16)

转载于:https://www.cnblogs.com/scarlettxu/p/5359517.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值