为什么我不能从递归方法中获得任何输出?

时间:2015-06-14 01:12:31

标签: java recursion permutation

我正在尝试插入字符(a,b,c)并获取数组的排列。

由于某种原因,它不打印出来。我确定这是一个简单的错误,但我找不到它。非常感谢这些建议。

public static void main(String[] args) {

    int [] A = new int []{'a','b','c'};
    permute(A, 3);
}

public static void permute(int[] A, int p){
    if(A.length == 0){
        return;
    }
    for(int i = 0; i < A.length; i++){
        char ch = (char) p;
        p += A[i];
        permute(A,p);
        p = ch;
    }
}

1 个答案:

答案 0 :(得分:1)

您的方法存在一些问题:

  • 当您使用char s时使用int s,反之亦然;
  • 该程序不包含任何System.out.print语句,因此您永远不会指示Java程序打印任何内容;
  • 这不是一个枚举所有可能排列的程序。这实际上会生成堆栈溢出异常(不要与此站点的名称混淆),只是因为数组的长度永远不会改变,因此您总是会调用for部分并继续建立一个调用堆栈;和
  • 目前尚不清楚p的含义。

内联排列程序如下所示:

public static void permute(char[] a, int p){
    if(p >= a.length) {//we've reached the end of the array, now print
        for(int i = 0; i < a.length; i++) {
            System.out.print(a[i]);
        }
        System.out.println();
    } else {
        char cp = a[p];
        for(int i = p; i < a.length; i++){
            char ci = a[i];
            a[p] = ci;
            a[i] = cp;
            permute(a,p+1);
            a[i] = ci;
        }
        a[p] = cp;
    }
}

online jDoodle

然后,您使用permute(a,0)调用该方法,并a列出您想要排列的字符。