我有无限循环

时间:2017-02-05 15:12:01

标签: java

我正在练习我的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);
        }
    }

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;有点长^^