所以我正在研究一本关于递归的教科书练习题,我在那里走了一半。我已经提出了两个函数,它们将一个数组中的元素递归复制到另一个数组中,但我有点卡在我的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
答案 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);
}
我希望它有所帮助。