关于用java写的递归函数的问题~~
下面这个程序实现的功能是:求一个五位数abcde,使得abcde*4=edcba(不能使用if,for,while,swith等语句)。
我碰到的问题是这样的:当我调用solve方法的时候,把参数值设为是10000的时候就会出现好像是栈溢出的异常,如果我设成是20000就不会出现这中错误了,不知道是什么原因,希望大家能帮忙解释一下,谢谢~~
public class Test {
public long solve(long no) {
String str = String.valueOf(no);
String newstr = str.substring(4) + str.substring(3, 4)
+ str.substring(2, 3) + str.substring(1, 2)
+ str.substring(0, 1);
long e = Long.parseLong(newstr);
return (no > 99999) ? 1 : ((e == no * 4) ? no : solve(++no));
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.solve(19999));
}
}
------解决方案--------------------递归调用是要用堆栈的,只要条件不满足,就会一层一层地往上加,因为 19999 离正确答案 21978,比 10000 接近很多,不至于导致栈溢出,这个递归我试了一下,临界值在 18959~21978 之间,不在这个范围内的值都会导致栈溢出。
这个程序没有必要使用递归进行处理,递归的效率低于循环的效率,而且很容易导致栈溢出。