StackOverflowError在寻找方法中

时间:2015-09-30 04:21:27

标签: java stack-overflow combinations

您好我正在尝试为问题陈述编写Java代码:

找不到向m个成员分发n个硬币的方法,其中一个是队长(经销商)。每个成员一次可以拿1个硬币并将其传递给包括船长在内的其他成员。船长不能拥有第一枚硬币。然而,当只剩下一枚硬币时,硬币应交给船长。这可能有多少种方式?

我把它绑了。但得到StackOverflowError。请帮助。

我在这里开始调用解决方案(1,n)

private static int solve(int r, int n)
    {
        int count = 0;
        if(n==2 && r!=1)
        {
            return 1;
        }
        if(n==2 && r==1)
        {
            return 2;
        }
        for(int i=1;i<=m;i++)
        {
            if(r!=i)
            count += solve(i,--n);  
        }
            return count;
    }

堆栈跟踪

Exception in thread "main" java.lang.StackOverflowError
    at NoPrey.solve(NoPrey.java:50)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:62)
    at NoPrey.solve(NoPrey.java:

1 个答案:

答案 0 :(得分:1)

这只是为了帮助您了解错误。

这种情况正在发生,因为n的值是负的。只需将System.out.println(r + "\t\t" + n);放在方法的开头并再次运行即可。 n=4 m=3,初始值为r=1

public static void main(String[] args) throws FileNotFoundException {
  solve(1, 4);
}

private static int solve(int r, int n) {
  System.out.println(r + "\t\t" + n);
  // rest of the code same.

错误前输出:
1 4 2 3 1 2 3 1 1 0 2 -1 1 -2 2 -3 1 -4 2 -5 1 -6 2 -7 1 -8