2016-04-05 8 views
2

私は途中にある再帰に焦点を当てたテキストブックの練習問題に取り組んでいます。私は再帰的に1つの配列の要素を別のものにコピーする2つの関数を考え出しましたが、私はreverseArray3関数に固執しています。サブアレイX [i、...、j]を逆にする再帰関数。インデックスiからjまでの要素

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(); 
    } 
} 

が出力のようになります方法です。私はそれが役に立てば幸い

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); 
} 

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 

答えて

2

私はこれを示唆しています。

+0

ありがとうございました! – HPotter

関連する問題