循环递归而不是在返回语句之前增加它的值

时间:2017-07-23 15:15:09

标签: java recursion

public class Main2 {
    private static int[] arr = new int[3];
    private static int[] values = new int[]{1, 2, 3, 4};

    public static void main(String[] args) {
        generateVariations(0);
    }

    private static void generateVariations(int index) {
        if (index == arr.length) {
            System.out.println(Arrays.toString(arr));
            return;
        }
        for (int i = index; i < values.length; i++) {
            arr[index] = values[i];
            swap(i, index);
            generateVariations(index + 1);
            swap(i, index);
        }

    }

    private static void swap(int i, int index) {
        int temp = values[i];
        values[i] = values[index];
        values[index] = temp;
    }
}

因此,在此代码中,generateVariations方法中的for循环不会增加i的值,直到我的代码执行到return语句为止。为什么会这样?我的意思是i的值为index,就像i++不存在一样,只有在return语句被命中时才会自我增加。

1 个答案:

答案 0 :(得分:2)

考虑一下 - i++只有在for循环的主体完成后才会执行。但是,你正在递归地调用generateVariations,即在再次调用身体generateVariations的第一个之前再次调用......再次......再次调用generateVariations。当然,index的每次调用都会变得越来越大generateVariations(因为你在调用中递增) - 因为这样的执行最终会命中return语句。一旦发生这种情况,身体最内部(可能是4次深入i)会完成并最终增加 }的值等等。