如何从for循环关系中创建递归关系

时间:2019-07-17 16:50:08

标签: java for-loop recursion

这是我的第一篇文章,也是我对Java的新手,正试图制作一个小程序,该程序将给出从0到给定数字的所有唯一数字。例如对于输入:4,输出将是:

    1234
    1243
    1324
    1342
    1423
    ....

依此类推,4也意味着输出将在一定范围内 1000

我已经尝试过建立这样的递归关系方法,但是找不到任何有用的方法。因此,我改为创建了一个for循环关系,该循环将给出我想要的结果,但仅适用于4的输入。我还有一个检查数字是否唯一的方法。 boolean check(int[] array) {...}如果数字唯一,则返回true

public static void thing(int num) {
        int[] arr = new int[num];
        for(int a = 1; a <= 4; a++) {
            arr[0] = a;
            for(int b = 0; b <= 4; b++) {
                arr[1] = b;
                for(int c = 0; c <= 4; c++) {
                    arr[2] = c;
                    for(int d = 0; d <= 4; d++) {
                        arr[3] = d;
                        if(check(arr)) {
                            System.out.println(arr[0] + "" + arr[1] + "" + arr[2] + "" + arr[3]); 
//here in the result it would print the array like in fibonacci I guess 
                        }   
                    }
                }
            }
        }
    }

因此,就目前而言,我需要控制每种情况下所需的循环数,而我需要的是由输入设置的深度。就像我之前说的,输出形式如下:

    1234
    1243
    ....
    ....
    4312
    4321

该命令无关紧要,它仍然可以运行。如果我错误地认为复发可以解决问题,请帮助我找到解决方案。 谢谢

1 个答案:

答案 0 :(得分:1)

如WJS所述,您正在寻找置换算法。有很多不同的方法,但这是一种简单的方法:

class HeapAlgo {
    //Prints the array
    private void printArr(int a[], int n) {
        for (int i = 0; i < n; i++)
            System.out.print(a[i] + " ");
        System.out.println();
    }

    //Generating permutation using Heap Algorithm
    private void heapPermutation(int a[], int size, int n) {
        // if size becomes 1 then prints the obtained
        // permutation
        if (size == 1)
            printArr(a, n);

        for (int i = 0; i < size; i++) {
            heapPermutation(a, size - 1, n);

            // if size is odd, swap first and last
            // element
            if (size % 2 == 1) {
                int temp = a[0];
                a[0] = a[size - 1];
                a[size - 1] = temp;
            }

            // If size is even, swap ith and last
            // element
            else {
                int temp = a[i];
                a[i] = a[size - 1];
                a[size - 1] = temp;
            }
        }
    }

    // Driver code
    public static void main(String[] args) {
        HeapAlgo obj = new HeapAlgo();
        int[] a = {1, 2, 3};
        obj.heapPermutation(a, a.length, a.length);
    }
}

来源:heap permutations