您好我正在尝试为问题陈述编写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:
答案 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