再帰


自分自身を呼び出す

ある関数から別の関数を呼び出す方法はもうわかりますね
ところで、関数内で自分自身を呼び出した場合はどうなるのでしょうか

このことを再帰と呼び、C言語は再帰をサポートしています
次のような関数を考えます

void func() {
func();
}

自分自身を関数内で呼び出していますね
この場合は無限ループと化します

再帰を利用することによって、特殊なループを作成することができます
しかし、多くのことは再帰を使用しなくとも、ループステートメントで可能です
そのため、再帰を使用するのは極まれなケースです
なぜならば、関数呼び出しはループステートメントによるループよりも遅いからです
再帰は一部のアルゴリズムを簡素化するのに用いられることがあります
#include<stdio.h>

void func(int );

int main() {
        func(0);

        printf("プログラムを終了します");
        return 0;
}

void func(int max) {
        if (max <= 10000) {
                printf("%d\r",max);
                func(max + 1);
        }
}
このサンプルは、ごく簡単な再帰の例です
通常、このような使用のしかたはしません

また、次のプログラムのようにお互いの関数が呼び出し合う相互再帰ということも可能です
#include<stdio.h>

void func1(int );
void func2(int );

int main() {
        func1(0);

        return 0;
}

void func1(int max) {
        if (max <= 100) {
                printf("%d",max);
                func2(max + 1);
        }
}

void func2(int max) {
        printf(" ");
        func1(max + 1);
}
C言語の関数を使った一つの技術として、記憶しておいてください



前のページへ戻る次のページへ