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/