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