Java 递归计数

Java 递归计数,java,recursion,Java,Recursion,我试图计算它在递归循环中运行的次数,但它不断抛出一些不正确的疯狂大数字。我想我的第一个问题是,这甚至是可能的,如果是的话,我应该在排列方法中把计数放在哪里 package a02; import java.util.Random; public class permutations { private static int count = 0; static void permute(int[] a, int k) { if (k == a.length) { f

我试图计算它在递归循环中运行的次数,但它不断抛出一些不正确的疯狂大数字。我想我的第一个问题是,这甚至是可能的,如果是的话,我应该在排列方法中把计数放在哪里

 package a02;

import java.util.Random;

public class permutations {
private static int count = 0;

static void permute(int[] a, int k) {
    if (k == a.length) {
        for (int i = 0; i < a.length; i++) {
            System.out.print(" [" + a[i] + "] ");
        }
        System.out.println();
    } else {
        for (int i = k; i < a.length; i++) {
            int temp = a[k];
            a[k] = a[i];
            a[i] = temp;

            permute(a, k + 1);

            temp = a[k];
            a[k] = a[i];
            a[i] = temp;
            count++;
        }
    }
}
a02包;
导入java.util.Random;
公共类置换{
私有静态整数计数=0;
静态无效置换(int[]a,int k){
如果(k==a.length){
for(int i=0;i
在函数中,count++在for循环中。我认为这就是为什么会得到非常大且不正确的数字。将count++语句移动到方法permute的开头或接近结尾,然后再返回,您应该会得到正确的输出。(在您的情况下,count++应该在整个if-else块之外)

请注意,您不应该根据答案中的建议来解决您的问题,因为这样一来,对于可能有类似问题的未来访问者来说,答案将不再有任何意义。@GhostCat已回滚,且与此无关:阅读java命名约定……类名始终大写。请:使用有意义的名称.a,k…这些名称什么都没说!更糟糕的是:不要重用名称:在该方法中使用k参数,然后使用另一个k作为循环索引,这是非常糟糕的做法。