どんどん行こう。
昨日までで、なんとなくd をパラメータとしたループになりそうだと分かる。
各段階の計算結果はreturn_value のd - 1 の場所に格納していけば良い。
ということで、その見込みに従いd に対する操作を追加してみよう。
long[ ][ ] array = new long[dim][ ]; long[ ] return_value = new long[dim]; int d = dim; //d = dim if(d < 2){ //d = 1 return_value[d - 1] = array[d - 1][0]; d++; }else{ for(int i = 0; i <= d; ++i) { if(i == 0){ (B) } if(i < d){ (C) d--; //d = dim - 1 if(d < 2){ //d = 1 return_value[d - 1] = array[d - 1][0]; d++; }else{ for(int i = 0; i <= d; ++i) { if(i == 0){ (B) } if(i < d){ (C) d--; //d = dim - 2 if(d < 2){ //d = 1 return_value[d - 1] = array[d - 1][0]; d++; }else{ for(int i = 0; i <= d; ++i) { if(i == 0){ (B) } if(i < d){ (C) d--; //d = dim - 3 //以下省略 //d = dim - 2 (E) } if(i == d){ return_value[d - 1] = value; d++; } } } //d = dim - 1 (E) } if(i == d){ return_value[d - 1] = value; d++; } } } //d = dim (E) } if(i == d){ return_value[d - 1] = value; d++; } } }
これでループにまとめても、d の値に応じて処理が進みそうな感じになった。
ところで、ここから更に展開しようとすると、どうしてもi による多重ループをなんとかしないといけないことに気づく。
ということでi も各呼び出し段階ごとに確保してみる。
各段階のi はそれぞれi[d - 1] で置き換えることができる。
long[ ][ ] array = new long[dim][ ]; long[ ] return_value = new long[dim]; int[ ] i = new int[dim]; int d = dim; //d = dim if(d < 2){ //d = 1 return_value[d - 1] = array[d - 1][0]; d++; }else{ for(int i[d - 1] = 0; i[d - 1] <= d; ++i[d - 1]) { if(i[d - 1] == 0){ (B) } if(i[d - 1] < d){ (C) d--; //d = dim - 1 if(d < 2){ //d = 1 return_value[d - 1] = array[d - 1][0]; d++; }else{ for(int i[d - 1] = 0; i[d - 1] <= d; ++i[d - 1]) { if(i[d - 1] == 0){ (B) } if(i[d - 1] < d){ (C) d--; //d = dim - 2 if(d < 2){ //d = 1 return_value[d - 1] = array[d - 1][0]; d++; }else{ for(int i[d - 1] = 0; i[d - 1] <= d; ++i[d - 1]) { if(i[d - 1] == 0){ (B) } if(i[d - 1] < d){ (C) d--; //d = dim - 3 //以下省略 //d = dim - 2 (E) } if(i[d - 1] == d){ return_value[d - 1] = value; d++; } } } //d = dim - 1 (E) } if(i[d - 1] == d){ return_value[d - 1] = value; d++; } } } //d = dim (E) } if(i[d - 1] == d){ return_value[d - 1] = value; d++; } } }
今日はここまで。いよいよ、次回はi のループを消して、一つのループにまとめてみたい。