JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 再帰呼び出しとは

再帰呼び出し

日本語 再帰呼び出し、再帰呼出
英語 recursive call
ふりがな さいきよびだし
フリガナ サイキヨビダシ

解説

メソッドが、自分自身のメソッド呼び出すこと。
メソッドは、そのメソッドを再び呼び出すことができる。これを「再帰呼び出し」と言う。
 
特に特別な文法は必要なく、そのまま呼び出すことができる。同じメソッドなので「同じローカル変数には同じ値が入っているのか?」と思いがちだが、ローカル変数ブロックに入るたびに新しく作られるため、重複することはない。再帰呼び出しをうたびに、そのメソッド内での処理は「新規にわれる」と考えた方がいいだろう。
再帰呼び出しをうことで、メソッドの処理を複数回繰り返すことができる。つまりwhileforといったループ処理に似たことができる。
当然、while等と同じように「特定の条件では再帰呼び出しを止める」処理が必要となる。再帰呼び出しを止めるためには、次のメソッドを呼ばずにreturnメソッド抜ける、というのをこれまで呼んできたメソッドうようにすればよい。また、条件のチェックをうために、引数に値を渡すかフィールドで値を持つ必要がある。
 
再帰呼び出しはwhile等のループの代替品ではない。
条件のチェックや、ループの終了方法が複雑になる傾向があるため、再帰呼び出しはwhile等のループに比べてバグを生み出しやすい。また、テクニカルな面があるため、自分に実力があると「使いたくなってしまう」傾向にある。
まずそれがwhile等のループえないかどうか確認し、単純なループ処理ではえない、もしくは再帰呼び出しの方がシンプルにプログラムを作ることができる場合にのみ再帰呼び出しを使用した方が良いだろう。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 再帰呼びするメソッドを呼び出します。
        Sample sample = new Sample();
        sample.recursiveMethod( 0 );
        // 1
        // 2
        // 3
        // 4
        // 5
    }

    /**
    *   再帰呼び出しするメソッド。
    */
    private void recursiveMethod( int i )
    {
        // iをインクリメントします。
        ++i;
        if( i > 5 )
        {
            // i が5以上なら終了。
            // この「ストッパー」がないと再帰呼び出しは止まりません。
            return;
        }

        // iを出力。
        System.out.println( i );
        // そして、自分自身を呼び出します。
        // これが再帰呼び出しになります。
        recursiveMethod( i );
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // 再帰呼びするメソッドを呼び出します。
        Sample sample = new Sample();
        sample.recursiveMethod( 0 );
        // 1
        // 2
        // 3
        // 4
        // 5
    }

    /**
    *   再帰呼び出しするメソッド。
    */
    private void recursiveMethod( int i )
    {
        // iをインクリメントします。
        ++i;
        if( i > 5 )
        {
            // i が5以上なら終了。
            // この「ストッパー」がないと再帰呼び出しは止まりません。
            return;
        }

        // iを出力。
        System.out.println( i );
        // そして、自分自身を呼び出します。
        // これが再帰呼び出しになります。
        recursiveMethod( i );
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/04/28
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。