再帰的な関数の呼び出し

 サブルーチンに絡み、ひとつ、今回はTips的な知識をご紹介します。C言語で定義した関数は、関数の中で、その関数自身を呼び出すことが可能です。まずは、以下のプログラムを作成し、実行してみて下さい。

#include <stdio.h>

void hello() {
    x = x + 1;
    printf("%d 回目のHello!\n", x);
    if(x < 10) {
        hello();
    }
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    hello();
    
    return 0;
}

 以下のように表示されることを確認して下さい。

1 回目のHello!
2 回目のHello!
3 回目のHello!
4 回目のHello!
5 回目のHello!
6 回目のHello!
7 回目のHello!
8 回目のHello!
9 回目のHello!
10 回目のHello!

 「Hello!」と表示するhello関数を定義しました。そのhello関数の中で、hello関数自身を呼んでいます。ただし、何もしなければ無限ループで何回もhello関数が実行されるので、カウンター目的の変数xを用意し、10回を超えて実行されないようにしています。このように、関数の中で関数自身を呼び出すことが出来ます。このことを再帰(再帰的な関数の呼び出し)と呼んでいます。

 再帰的な関数の呼び出しは、あまり多用されないかもしれません。実際、上記のプログラムであれば、while文やdo-while文によるループで記述することが可能で、無理に再帰的な関数の呼び出しで書く必要はありません。再帰的な関数の呼び出しがよく使われる例としては、数学計算で主に使われます。例えば、階乗を求める数学計算を行いたい場合は、よく、この再帰的な関数の呼び出しが使われます。なので、このような使い方は普段はあまり使う機会は無いかもしれませんが、このように自分自身を呼び出すような書き方が可能である、ということだけ、覚えておいて下さい。

■スポンサーリンク

このページの先頭へ