java - 循环递归在返回语句之前不增加其值

标签 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 时自行增加code> 语句被命中。

最佳答案

想一想 - i++ 仅在 for 循环体完成后才会执行。但是,您正在递归地调用 generateVariations ,即在完成第一个 body 之前 generateVariations 被再次调用......一次又一次......一次又一次。当然,generateVariations 的每次调用都会获得一个更大的index(因为您在调用中递增) - 因为这样的执行最终将命中 return 语句。一旦发生这种情况,主体的最内部(也许您深入 generateVariations 进行了 4 次调用)将完成并最终增加 i值,并且依此类推。

关于java - 循环递归在返回语句之前不增加其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45266677/

相关文章:

java - 将普通的Java代码转换为hadoop代码而不使用mapreduce?

Java从链表递归中删除一个元素

C程序递归函数

java - 在java 7中检测按下的键

javax.servlet.FilterChain 在 Firefox 中将 ContentType 设置为 text/plain

javascript - 使 Ajax 请求递归 - 检查文件是否存在

recursion - wget 使用 -r 和 -O - 挂起

python - 如何将这种在二叉树中的两个级别之间查找节点的递归实现转换为迭代版本?

Java:查找最长的连续相同字符数组

java - 子类构造函数中的重写函数 (JAVA)