gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:42:14 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com