おさえておきたいプログラミングの基本
C言語の関数のテクニックの一つとして、再帰呼び出しと呼ばれるものがあります。これは、ある関数が、自身の処理の中で、自分自身を呼び出すというものです。
それでは、実際に再帰呼び出しのサンプルを見てみましょう。まずは、以下のサンプルを実行してみてください。
list-rec6-1:main.c#include <stdio.h>
void recursive(int);
int main(int argc, char** argv) {
recursive(1);
return 0;
}
void recursive(int a){
printf("a=%d¥n", a);
if (a < 5){
// 再帰呼び出し
recursive(a + 1);
}
}
実行結果
recursive()関数は、引数として整数型変数をとり、まずその値を表示します。
そのあと、もしその値が5未満であれば、再び再帰処理によって、その値に1を足したものを引数として自分自身を呼び出します。
その結果、引数の値は1,2,3…と増えていき、5になった時点で終了します。
再帰呼び出しを行う際に注意しなくてはならないのが、スタックオーバーフローと呼ばれるものです。
C言語ではローカル変数は、「スタック領域」と呼ばれる部分に確保されます。スタック領域の大きさも限度があるので、再帰関数の呼び出しごとに、ローカル変数を確保することを繰り返すと、スタック領域が溢れる可能性があります。そのような現象がスタックオーバーフローと呼ばれるものです。
再帰呼び出しを行う際にはその点に気をつけながら行う必要があります。
練習問題 : 問題6.
一週間でわかるC言語・C++言語がオンライン講座になりました!動画と音声によってさらにわかりやすくなりました!! 1講座で2つの言語を学ぶことができる上に、練習問題の回答もダウンロードできます。
Read →
本講座が「1週間でC言語の基礎が学べる本」として書籍化されました!サイトの内容プラスアルファでより学習しやすくなっています!Impressより発売中です!!
Read →