Top授業関係プログラミング言語2 → 関数と再帰
[前のページ] [目次] [次のページ]


i. 関数と再帰


i.1 再帰呼び出し

関数の中で、自分自身を呼び出すことができます。 これを、再帰呼び出しと呼びます。再帰呼び出しを使うと、プログラムが簡単になったりします。

この節では、再帰呼び出しの仕方と、簡単な例を紹介します。


i.2 再帰呼び出しの使い方と注意

再帰呼び出しを使うのに、特別な手続きとかは必要有りません。 (自作の)関数を書くときに、その中で自分自身を普通に関数として使用するだけです。 たとえば、sample03という関数の中で、sample03という関数を使用すれば、それで再帰呼び出しが行われます。

たとえば、

#include<stdio.h>

int sample03(int i){
      略
        return i*sample03(i-1);
      略
}

main(){
      略
}

のようになります。この例では、sample03という関数の中で、sample03という関数を使用しています。

関数の再帰呼び出しをするさいには、停止条件を考える必要があります。これは、「関数の再帰を、どこで止めるか」の条件です。停止条件を入れておかないと、

sample03の中でsample03を呼び、呼び出された sample03 の中で sample03 を呼び、更に呼び出された sample03 の中で sample03 を呼び、更に呼び出された sample03 の中で sample03 を呼び、更に呼び出された sample03 の中で sample03 を呼び、更に呼び出された sample03 の中で sample03 を呼び、更に呼び出された sample03 の中で sample03 を呼び……

と、永遠に繰り返すことになってしまいます。

停止条件を入れた関数 sample03 の例を、次に示します。

int sample03(int i){

    if(i=1){
        return 1;
    }else{
        return i*sample03(i-1);
    }
}

この例では、i=1 以外の時は sample03 を呼び出しています(つまり、再帰を行っています)。一方、i=1 になったときには、1 を戻り値として返します(つまり、再帰を行いません)。これが停止条件です。

この例の sample03 の引数は、1ずつ小さくなっていくので、いずれ、再帰が止まります。


i.3 再帰の例

先ほどの sample03 に対し、引数として 5 を与えた場合、どのように動作するかを見てみましょう。先ほどの関数sample03は、次のようなものでした。今度は、説明しやすいように、行番号が降ってあります。

01: int sample03(int i){
02: 
03:     if(i=1){
04:         return 1;
05:     }else{
06:         return i*sample03(i-1);
07:     }
08: }

目次に戻る
授業関係のページに戻る