Java 将递归函数重写为迭代函数
如果我们从上到下计算标高,则短梯段将被称为立方体构造,其中每个下一层由严格大于上一层的立方体组成。您需要精确计算可以从n个立方体构建的梯子的数量 我对这项任务的解决方案没有通过时间测试。为了解决这个问题,我决定尝试将递归函数重写为通常的函数,但到目前为止效果不是很好Java 将递归函数重写为迭代函数,java,Java,如果我们从上到下计算标高,则短梯段将被称为立方体构造,其中每个下一层由严格大于上一层的立方体组成。您需要精确计算可以从n个立方体构建的梯子的数量 我对这项任务的解决方案没有通过时间测试。为了解决这个问题,我决定尝试将递归函数重写为通常的函数,但到目前为止效果不是很好 public class main { int n; public static int counts(int prev_level, int n) { if (n == 0){
public class main {
int n;
public static int counts(int prev_level, int n) {
if (n == 0){
return 1;
}
int count = 0;
for (int level =1; level<prev_level; level++){
if((n-level)<0)
break;
count += counts(level,n-level);
}
return count;
}
public static void main(String[] args) {
int n;
int res = 0;
int count = 0;
try {
Scanner sc = new Scanner(new File("input.txt"));
while (sc.hasNext()) {
n = Integer.parseInt(sc.nextLine());
res = counts(n+1,n);
}
} catch(IOException e) { System.out.println("Input error"); }
try{
FileOutputStream writer = new FileOutputStream("output.txt");
PrintStream p = new PrintStream(writer);
p.println(res);
writer.close();
} catch(IOException e) { System.out.println("Output error"); }
}
}
公共类主{
int n;
公共静态整数计数(整数上一级,整数n){
如果(n==0){
返回1;
}
整数计数=0;
对于(int level=1;levelRewriting作为非递归并不能加快速度。您需要一个更好的算法……但它通常可以降低堆栈溢出的风险,例外情况是什么。该算法做什么?@hovercraftfullofels:当然。但我希望它在超时之前耗尽堆栈空间并出错。如果有n是否会显示错误?看起来在counts()中多次重新计算函数。这里有一个相关的问题可以通过记忆来解决,应该是类似的:以非递归的方式重写不会使它更快。你需要一个更好的算法……但它通常可以降低堆栈溢出的风险,例外情况是什么?该算法做什么?@hovercraftfullofels:当然。但我希望它会用完堆栈空间的大小和超时前的错误。如果有错误,会显示吗?看起来在counts()函数中多次重新计算。下面是一个相关的问题,可以通过备忘录解决,应该类似: