Exception in thread "main" java.lang.StackOverflowError
题目原来是:用递归算法写一段程序实现 1+2+...+1000000
然后,简单吗,就是个递归吗,有基础的同学,分分钟就把代码给码完了。
但是,面试的时候,自己没电脑的吗,你又不知道代码的运行结果是啥。
写完之后,感觉甚好。
运行结果:
题目原来是:用递归算法写一段程序实现 1+2+...+1000000
然后,简单吗,就是个递归吗,有基础的同学,分分钟就把代码给码完了。
但是,面试的时候,自己没电脑的吗,你又不知道代码的运行结果是啥。
写完之后,感觉甚好。
但是,在机器上一运行就炸了。具体如下:
package com.lxk.test;
public class Questions {
/**
* 用递归算法写一段程序实现 1+2+...+1000000
*/
private static long questions7(long sum) {
if (sum == 0) {
return sum;
}
return sum + questions7(sum - 1);
}
public static void main(String[] args) {
long result = questions7(10000);
System.out.println(result);
}
}
运行结果:
原因:
这个问题一般是你的程序里头可能是有死循环或递归调用所产生的
上面是一百万以内的数计算和,这个一直调用自己,方法栈一直分配空间,直到溢出,报异常。炸了。
一千还是OK的,但是一万就炸了,别提一百万了。
总结,为了避免这个异常,实际代码最好绕过使用递归算法。因为你不确定将来的需求会不会真的有100变成100万,我是针对上面的例子来说的。
你用其他方法算不行吗?
这个题的主要方向可能如下:
1,看你会不会写个递归
2,看你知道不知道递归会出现这个堆栈溢出,当然,我觉得出题人,估计也不知道这个题目会溢出。
3,如果出题人知道这个会溢出的话,那么考的就比较高深了,那就是建议,代码里面要避免,不推荐,使用递归来处理问题。