- 締切済み
再帰
他の質問と平行してしまい申し訳ありません。再帰について少々おききしたいのですが、 配列の中にある数字の中から最大値と最小値を再帰処理でもとめたいのですが、うまくいきません。 public int minMax(n, array, min, max){ // nは配列のサイズです。 min=max=array[n-1]; if(array[n-2]<min) min=array[n-2]; if(array[n-2]>max) max=array[n-2]; return minMax(n-1,array,min,max); } 最初に比較するために min=max=array[n-1];と初期化したのですが、再帰処理ですからまた同じ初期化をしてしまうことになります。 forループなどを使えるなら初期化だけループの外でやれば済むのですが、再帰だとどのようにすればよいのでしょうか。 宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- covachan
- ベストアンサー率38% (46/120)
いやいや・・・ そもそもこのコードは問題でしょ。。。 メソッドが処理で自分自身を呼び出しているようですが、 再帰処理とか以前の問題ですよ。 確実に開発マシンはフリーズしてスタックオーバーフローですよね。
- LOHA
- ベストアンサー率52% (203/388)
>配列の中にある数字の中から最大値と最小値を再帰処理でもとめたい なぜ再帰でしたいのよく分から無いのですが…。 普通最大最小を求めるのに再帰は使いません。深くなったらスタックオーバーフローになりますし。 まぁ再帰の練習として、ということなのかな。 >最大値と最小値を再帰処理でもとめたい >return minMax(n-1,array,min,max); これで、最大値と最小値を同時に返しているつもりなのでしょうか? #でも関数は値をひとつしか返せないわけで、同時に返すことはできないですよね。 どういうふうに組みたいのかよく分からないです。 補足お願いします。 色々と変な気がするので、一度一から考えて直してみるとよいかと思います。
補足
すみません。色々と勘違いしてしまっていました。 自己解決しました。ありがとうございました。