1

2D 配列の要素を次の行の要素で乗算するプログラムを作成しています。最初に2D配列のすべての行を反復処理し、0以外の配列値がある場所を見つけてから、その値を取得し、再帰呼び出しで乗算して配列の次の行で関数を実行する再帰メソッドがあります. 問題は、for ループが行の次の要素に移動する前に、再帰からの値が返されることです。returnこれは、再帰呼び出しの前にステートメントを配置した結果であることを知っています。しかし、 を取り出した場合return、 から返される整数total()は実際にはオフ (通常は 0) です。

int total(int current, int totalCont, int array[10][10]){

  //find the elements in the array that do not contain 0                      
  for(int i=0; i<10; i++){
   if(array[current][i] != 0){

      //base case                                                                              
      if(i == 0){
        return array[current][i];
      }

      //recursive case                                                                         
      else{
        return (array[current][i]) * (total(current+1, totalCont, array));

      }
    }
  }
}
4

1 に答える 1

1

この場合、関数は条件の直後に値を返します

    if(array[current][i] != 0)

本当です。したがって、最初の列の値が計算されます。

    array[current][column] != 0

しかし、私はあなたのアルゴリズムのアイデアをはっきりと理解していません。

また、関数が行によって境界を超えた場合、再帰に出口点がないこともわかります。条件も追加する必要があります。この場合は次のようになります

    if (current >= 10) return something;

アルゴリズムのアイデアの詳細を確認することは役に立ちますが、それは私にとって十分に明確ではありません (おそらく、何かが表示されないだけです)。

于 2013-11-10T01:46:19.250 に答える