再帰呼び出し
再帰呼び出しとは
C言語の関数のテクニックの一つとして、再帰呼び出しと呼ばれるものがあります。これは、ある関数が、自身の処理の中で、自分自身を呼び出すというものです。
サンプルプログラム
それでは、実際に再帰呼び出しのサンプルを見てみましょう。まずは、以下のサンプルを実行してみてください。
list-rec6-1:main.c#include <stdio.h> void recursive(int); void main(){ recursive(1); } void recursive(int a) { printf("a=%d¥n", a); if (a < 5){ // 再帰呼び出し recursive(a + 1); } }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 2
a = 3
a = 4
a = 5
recursive()関数は、引数として整数型変数をとり、まずその値を表示します。そのあと、もしその値が5未満であれば、再び再帰処理によって、その値に1を足したものを引数として自分自身を呼び出します。その結果、引数の値は1,2,3…と増えていき、5になった時点で終了します。
スタックオーバーフロー
再帰呼び出しを行う際に注意しなくてはならないのが、スタックオーバーフローと呼ばれるものです。
C言語ではローカル変数は、「スタック領域」と呼ばれる部分に確保されます。スタック領域の大きさも限度があるので、再帰関数の呼び出しごとに、ローカル変数を確保することを繰り返すと、スタック領域が溢れる可能性があります。そのような現象がスタックオーバーフローと呼ばれるものです。
再帰呼び出しを行う際にはその点に気をつけながら行う必要があります。