【发布时间】:2019-09-17 11:51:30
【问题描述】:
我需要写两个recusion方法。其中之一检查需要从其最高有效数字到最低有效数字枚举的候选值。例如,如果数字是三位数,则它需要是 124 126 128 134 136 138 146 148 156 等等,直到 999(也是偶数)。
我写了其中两个,一位,两位和三位数字没有问题,但是,在四位数字之后会导致 java.lang.StackOverflowError 我该如何解决这个问题?
public boolean checkRec(int num)
{
String numLong = String.valueOf(num);
if((Integer.valueOf(numLong.substring(numLong.length()-1)) % 2) != 0)
return false;
if(numLong.length() == 1)
return true;
else
{
if(Integer.valueOf(numLong.substring(0,1)) >= Integer.valueOf(numLong.substring(1,2)))
{
// System.out.println("asd");
return false;
}
numLong = numLong.substring(1);
num = Integer.valueOf(numLong);
return checkRec(num);
}
}
public String orderAndPrint(int num, int decimal)
{
if(num >= Math.pow(10, decimal+1))
return "End";
else
{
if(checkRec(num))
{
return "" + num + " " + orderAndPrint((num + 2), decimal);
}
return orderAndPrint((num + 2), decimal);
}
【问题讨论】:
-
你只是有一个非常深的递归,因为你在大范围的值上加紧了 2 秒。唯一的选择是增加你的最大调用堆栈深度,或者不递归那么深(例如,使用循环代替)。
-
因为这是尾递归,您可以将其简化为循环。它是继承迭代的。
标签: java recursion integer stack stack-overflow