我对全面了解递归有一个问题。我会复制代码然后我们会告诉你我从整个事情中学到了什么,我会问你我的问题。
static void generate(int index, int[] vector) {
if (index < 0) {
print(vector);
} else {
for (int i = 1; i <= 5; i++) {
vector[index] = i;
generate(index - 1, vector);
}
}
}
static void print(int[] vector) {
System.out.println(Arrays.toString(vector));
}
public static void main(String[] args) {
int size = 2;
int[] vector = new int[size];
generate(size - 1, vector);
}
在开始时索引为1并且在位置1的for循环之后,程序记录1之后递归调用该方法并且索引变为0.在位置0上程序记录1.之后程序检查值索引,它是-1(这就是为什么它打印第一个数组)。之后,索引仍为null,程序仅记录位置null,但在位置1,值为1而不进行迭代。我无法理解程序如何知道位置1的值是1?
答案 0 :(得分:0)
递归和迭代的组合可能会使它有点难以理解。您可以随时调试它以了解它正在做什么。
首先,generate (1, vector)
。
然后,在迭代中,调用vector[1] = 1
,并调用generate (0,vector)
。
在此调用中,再次调用迭代,并在设置i=1
时设置vector[0] = 1
。调用generation(-1,vector),递归中断,并打印数组的内容:[1,1]
下一次迭代:i=2;
vector[0]=2
打印:[2,1]
然后:[3,1],[4,1],[5,1]
返回generate (1, vector)
,设置vector[1] = 2
,并调用generate (0,vector)
......等等......