递归生成向量

时间:2015-08-02 16:16:19

标签: java algorithm recursion

我对全面了解递归有一个问题。我会复制代码然后我们会告诉你我从整个事情中学到了什么,我会问你我的问题。

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?

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) ......等等......