再帰メソッドについて
いつもお世話になっております。
再帰メソッドについて質問があります。
後述のプログラム実行後、以下の結果が
得られました。
********** depth = [0] , value = [0]
********** depth = [1] , value = [1]
********** depth = [2] , value = [2]
########## depth = [2] , value = [3] …★
########## depth = [1] , value = [3]
recursionMethod() は3回呼ばれました。
(以下、ソース)
public class RecursionTest {
private static final int MAX_DEPTH = 2;
private static int cnt = 0;
private int val =0;
public static void main(String[] args) {
// 再帰メソッドの呼び出し
RecursionTest own = new RecursionTest();
own.recursionMethod(0);
System.out.println("\n recursionMethod() は" + cnt + "回呼ばれました。");
}
private void recursionMethod(int depth) {
// 再帰メソッドが呼ばれた回数をカウントする
cnt++;
System.out.println("********** depth = [" + depth + "] , value = [" + val + "]");
val++;
// パラメータ depth が MAX値に到達したら、return する
if (depth++ >= MAX_DEPTH) {
return;
}
// 自分自身の呼び出し
recursionMethod(depth);
System.out.println("########## depth = [" + depth + "] , value = [" + val + "]");
}
}
実行結果の★以降が得られる理由が全く分かりません。
・return で main() に戻るはずなのになぜ「###~」のログが出力されるのか
・depth の値がなぜデクリメントされるのか
(誰がデクリメントの処理をしているのか)
そもそも上記の結果を返すことが「メソッドの再帰的呼び出し」ということなのでしょうか?
ご教授頂ける方がいらっしゃいましたら、宜しくお願い致します。
お礼
BLUEPIXYさん、ありがとうございます。 教えていただいたこと、なかなか理解するのが難しかったのですが、最後の >基本的には、 >・この処理の前には、こうなっているハズだ >・この処理の後には、こうなっているハズだ >・この処理の前後で、かわっていないハズだ >という仮定を保証するような場合に使うということでいいんじゃないでしょうか というので、だいぶしっくり来るようになりました。