0

メソッドのオーバーロードを実装せずに、再帰を使用して配列を設定する方法はありますか? 引数として int のみを取り、配列を返すメソッドを構築したいと考えています。私が考えた唯一の解決策は、メソッドのオーバーロードを使用することです。int を引数として取る関数は、配列を作成し、配列と int の両方を 2 番目の関数に渡します。この関数は、int と配列の両方を引数として取り、実際の再帰を実装します。

次に例を示します。

public static int[] recursiveBuilder(int depth, int[] anArray){
    // Base case:
    if (depth < 0){
        return anArray;
    }
    // Recursion:
    else{
        anArray[depth] = depth;
        depth--;
        return recursiveBuilder(depth, anArray);
    }
}

public static int[] recursiveBuilder(int depth){
    return recursiveBuilder(depth, new int[depth + 1]);
}

オーバーロードの再帰部分で配列を宣言すると、再帰が呼び出されるたびに配列が初期化されるため、2 つ目の関数を使用して配列を宣言しました。

このアプローチは良いと考えられますか? 効率的?このダイナミクスを 1 つのメソッドだけに実装する方法はありますか?

4

1 に答える 1

1

非常に一般的に、再帰的なソリューションには 2 つのメソッドが必要です。top メソッドは、外部的に意味のある引数で呼び出され、必要なセットアップを行い、再帰メソッドを呼び出します。再帰的メソッドは、追加の引数を取ります。

たとえば、再帰的二分探索には、プローブと配列への参照のみをパラメータとして取る top メソッドが含まれる場合があります。再帰的メソッドは、配列のスライスに制限できるように、開始インデックスと終了インデックスも受け取ります。

通常、Java プログラムには多数の小さなメソッドがあり、Java 実装はそれを処理するように設計されています。コードを明確にして 2 つのメソッドで動作させることができる場合は、2 つのメソッドを使用して次の作業に進みます。

于 2013-09-02T02:18:35.727 に答える