2

メソッドを作成する必要があります。メソッドは、整数の 2 次元配列のパラメーターを受け取ります。このメソッドは、整数の合計が最大の行の番号を返します。再帰しか使えない!ループ禁止!-もちろん、行を単一の配列として合計するプライベート メソッドを作成する必要があります。次に、行を比較する別のプライベート メソッドを実行する必要がありますが、私が書いたメソッドは 1d のみであるため、実際には機能しません。配列、そして私は2次元配列からの行を比較する必要があります..

あらゆる種類の助けに感謝..

私のコードの一部:

private  int rowSum(int[] array, int index) {//the sum of an array(1d array)
        if (index == array.length)
            return 0;
        else
            return array[index] + rowSum(array, index + 1);
    }

**public int maxRow(int[][] a){------!!!---the problem...

    }**
4

5 に答える 5

1

引数を指定して main から再帰メソッドを呼び出してみます。

  • 配列[][]
  • 現在の列インデックス
  • 現在の行のインデックス
  • 現在の行の合計
  • 最高行インデックス
  • 最高行合計

私はここでそれを機能させたので、それは間違いなく可能です。約15行のコードです。幸運を!

于 2013-01-10T07:36:40.020 に答える
0

初心者向けの演習として、rowSum関数のシグネチャを次のように変更してみてください。

int rowSum(int[] array, int index, int sumSoFar)

再帰部分のreturn式が単なる再帰呼び出しになるように関数を記述できるはずです。

if (...) // exit case
  return sumSoFar;
else
  return rowSum(...);

(これは末尾再帰の実装になりました。)

その考え方で武装して、あなたがどのように書くかについて考えてください:

int indexOfMaxValue(int[] array, int index, int maxValueSoFar, int maxIndexSoFar)

それらを取得すると、これら2つの概念を組み合わせることができるはずです。

于 2013-01-10T07:41:08.997 に答える
0

次のコードを実行してテストする準備ができています。

public class RecursionSum {
    /* Sum a row until <code>index</code>. */
    private static int rowSum(int[] a, int index) {
        if (index == 0) { return a[0]; }
        // add the current element to the recursive sum
        return a[index] + rowSum(a, index - 1);
    }

    /* Sum a whole row. */
    private static int rowSum(int[] a) {
        return (a.length == 0) ? 0 : rowSum(a, a.length - 1);
    }

    /* Find the index of the array having the max sum until <code>index</code>. */
    private static int maxRow(int[][] a, int index){
        if (index == 0) { return 0; }
        // compare the current row's sum with the recursive max row's sum,
        // update index when it's a new winner
        int maxIndex = maxRow(a, index - 1);
        return (rowSum(a[maxIndex]) < rowSum(a[index])) ? index : maxIndex;
    }

    /* Find the index of the array having the max sum. */
    public static int maxRow(int[][] a){
        return a.length == 0 ? 0 : maxRow(a, a.length - 1);
    }

    /* very simple test */
    public static void main(String[] args) {
        int a1[][] = {};
        int a2[][] = {{1, 2, 3, 4}};
        int a3[][] = {{ 1, 2, 3, 4}, {8, 90}, {5, 6, 7}, {300, 4, 9}, {4, 6, 12}};
        System.out.println(maxRow(a1));
        System.out.println(maxRow(a2));
        System.out.println(maxRow(a3));
    }
}
于 2013-01-10T07:43:48.407 に答える
0

コード:

public class MainClass {
    static  int contents[][] = { {1, 2 , 3, 4} , { 4, 5, 8, 7}, { 4, 2, 8, 7}, { 4, 5, 0, 7} };
    public static void main(String[] args) 
    {
        System.out.println(getIndexOfRowWithHighestSum(contents, 0, 0));
    }
    public static int getIndexOfRowWithHighestSum(int[][] twoDAray, int currentIndex,int indexWithHighestSum){
        if(currentIndex>=twoDAray.length){
            return indexWithHighestSum;
        }
        int sum1 = getSumOfArray(twoDAray[currentIndex], 0) ;
        int sum2 = getSumOfArray(twoDAray[indexWithHighestSum], 0);

        indexWithHighestSum = (sum1 > sum2)?currentIndex:indexWithHighestSum;

        return getIndexOfRowWithHighestSum(twoDAray, currentIndex+1,indexWithHighestSum);
    }
    public static int getSumOfArray(int[] array, int currentIndex){
        if(currentIndex>=array.length){
            return 0;
        }
        return array[currentIndex]+getSumOfArray(array,currentIndex+1);
    }
}
于 2013-01-10T08:20:45.490 に答える