我正在练习我的java,通过计算用骰子达到n的可能方法。 当输入n值为较小的数字时,它可以工作。 但是当我将n值输入100时,它会无限循环。
你能帮助我吗?这是我的代码:
public static void main(String[] args)
{
testCode test = new testCode();
System.out.println(test.countWays(100));
}
private static int countWays(int n)
{
if(n<=1)
{
return 1;
}
else
{
System.out.println("counting ....");
return countWays(n-6) + countWays(n-5) + countWays(n-4) + countWays(n-3) + countWays(n-2) + countWays(n-1);
}
}
答案 0 :(得分:1)
你的问题类似于斐波纳西的问题:
x0 = 0, x1 = 1, x(N) = x(N-2) + x(N-1)
如果你需要使用大数字,你应该使用非递归方法:
static long countBis(int n) {
long fn, f1, f2, f3, f4, f5, f6;
int i;
f1=f2=f3=f4=f5=f6=fn = 1;
for ( i = 2; i <= n; i++ ) {
f6 = f5;
f5 = f4;
f4 = f3;
f3 = f2;
f2 = f1;
f1 = fn;
fn = f6 + f5 + f4 + f3 + f2 + f1;
}
return fn;
}
在每次迭代中,您只需计算先例的总和
我已经使用n = 32
=&gt;进行了测试与你的花了8秒,这个花了不到1秒(我尝试了n = 1000
=&gt;总是1秒,但我没有尝试你的哈哈,在n = 35
之后它&#39;有点长^^