反转子阵列X [i,...,j]的递归函数。索引i到j的元素包括

时间:2016-04-05 05:16:27

标签: java arrays recursion data-structures reverse

所以我正在研究一本关于递归的教科书练习题,我在那里走了一半。我已经提出了两个函数,它们将一个数组中的元素递归复制到另一个数组中,但我有点卡在我的reverseArray3函数上。

reverseArray3应该反转由索引i到索引j包含的那些元素组成的子数组X [i,... j]。我知道它应该通过交换位置i和j的元素然后在索引i + 1和j-1的子阵列X [i + 1,...,j-1]上递归调用自己来做到这一点。 我试着查找类似于我的问题,但没有运气。任何帮助

class Recursion {

static void reverseArray1(int[] X, int n, int[] Y) {
    if(n < 1)
       return;
    Y[Y.length-n] = X[n-1];
    reverseArray1(X, n-1, Y);
}

static void reverseArray2(int[] X, int n, int[] Y) {
    if(n < 1)
      return;
    Y[n-1] = X[X.length-n];
    reverseArray2(X, n-1, Y);
}

static void reverseArray3(int[] X, int i, int j) {
//Where I'm stuck

}

public static void main(String[] args) {
    int[] A = {-1, 2, 3, 12, 9, 2, -5, -2, 8, 5, 7};
    int[] B = new int[A.length];
    int[] C = new int[A.length];

    for(int x: A) System.out.print(x+" ");
    System.out.println();

    reverseArray1(A, A.length, B);
    for(int x: B) System.out.print(x+" ");
    System.out.println();

    reverseArray2(A, A.length, C);
    for(int x: C) System.out.print(x+" ");
    System.out.println();

    reverseArray3(A, 0, A.length-1);
    for(int x: A) System.out.println(x+" ");
    System.out.println();
    }
}

下面是输出的样子:

1 2 6 12 9 2 -5 -2 8 5 7
7 5 8 -2 -5 2 9 12 6 2 -1 
7 5 8 -2 -5 2 9 12 6 2 -1  
7 5 8 -2 -5 2 9 12 6 2 -1  

1 个答案:

答案 0 :(得分:2)

我建议:

static void reverseArray3(int[] X, int i, int j) {
    if(i>=j)
        return;
    int a=X[j];
    X[j]=X[i];
    X[i]=a;
    reverseArray3(X,i+1,j-1);
}

我希望它有所帮助。