Java 将递归函数重写为迭代函数

Java 将递归函数重写为迭代函数,java,Java,如果我们从上到下计算标高,则短梯段将被称为立方体构造,其中每个下一层由严格大于上一层的立方体组成。您需要精确计算可以从n个立方体构建的梯子的数量 我对这项任务的解决方案没有通过时间测试。为了解决这个问题,我决定尝试将递归函数重写为通常的函数,但到目前为止效果不是很好 public class main { int n; public static int counts(int prev_level, int n) { if (n == 0){

如果我们从上到下计算标高,则短梯段将被称为立方体构造,其中每个下一层由严格大于上一层的立方体组成。您需要精确计算可以从n个立方体构建的梯子的数量

我对这项任务的解决方案没有通过时间测试。为了解决这个问题,我决定尝试将递归函数重写为通常的函数,但到目前为止效果不是很好

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()函数中多次重新计算。下面是一个相关的问题,可以通过备忘录解决,应该类似: