java.lang.StackOverflowError具有正确终止条件的原因是什么?

时间:2019-06-16 19:47:19

标签: java algorithm data-structures stack dynamic-programming

黑客界也有类似的编码问题。挑战现在结束。我现在没有这个问题,但是我的代码看起来像这样。我通过了测试用例,但是由于大量输入而我的代码未被接受,导致出现此错误。 我已经编写了以下代码。

import java.util.*;
class TripleStep{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=10000;
        long[] memo=new long[n+1];
        Arrays.fill(memo,-1);
        long ans=StairOpr(n,memo);
        Arrays.fill(memo,-1);
        System.out.println(ans);
    }
    public static long StairOpr(int n,long[] memo){
        if(n<0){
            return 0;
        }
        else if(n==0){
            return 1;
        }
        else if(n==1){
            return 2;
        }

        else if(n==2){
            return 3;
        }
        else if(memo[n]>-1){
            return memo[n];
        }
        else
            memo[n]= (StairOpr(n-1,memo)%1000000007+StairOpr(n-2,memo)%1000000007+StairOpr(n-3,memo)%1000000007+n*n*(n+1)%1000000007)%1000000007;
            return memo[n];
    }
}

对于输入值10000,代码给出以下错误。

Exception in thread "main" java.lang.StackOverflowError
    at TripleStep.StairOpr(TripleStep.java:31)
    at TripleStep.StairOpr(TripleStep.java:31)

原因是什么,解决方案是什么?由于我编写动态编程代码,但是由于错误,答案未提交,因此我被拒绝。

1 个答案:

答案 0 :(得分:0)

您的递归函数正在创建一个大堆栈,这意味着您的函数一次又一次地调用自身,这超出了内存空间可以处理的范围。

请描述您要解决的问题。