第14講 関数の再帰的呼び出し
第1話 関数の再帰的呼び出しとは?

関数の再帰的呼び出しとは何でしょうか。
自分が自分を呼び出すことです。
といっても、何のこと何のことかわかりませんよね。
そこで、実例を作ってみましょう。
新しいプロジェクトを作り、
次のようにコーティングしてください。
#include<iostream>
using namespace std;
void f();
int main(){
   f();
}
void f(){
   cout<<"関数の再帰的呼び出し"<<endl;
   f();
}
実行結果

入門
そうです。これは無限ループです。
ですから、
C++
×で閉じてください。
さて、
void f(){
   cout<<"関数の再帰的呼び出し"<<endl;
   f();
}
関数fがfを呼び出しています。これが、自分が自分を呼び出す、つまり関数の再帰的呼び出しの意味です。
関数の再帰的呼び出しは、条件を付けないと無限ループになってしまいます。
なぜなら、fがfを呼び出しますが、呼び出されたfは再びfを呼び出します。
その呼び出されたfがまたfを呼び出します。
これが永遠に続いてしまいますね。
ですから、条件を付ける必要があります。
では、次のようにコーティングを変更したら問題は解消するでしょうか。
#include<iostream>
using namespace std;
void f();
int main(){
   int cn;
   cn=0;
   f();
}
void f(){
   cout<<"関数の再帰的呼び出し"<<endl;
   cn++;
   if(cn<10)f();
}
皆さんはビルド結果お分かりですよね。答えは、30行下。






















答え
ビルドエラーです。

エラー 1 error C2065: 'cn' : 定義されていない識別子です。 C:\VC++2010\d7\関数の再帰的呼び出しの簡単な例\関数の再帰的呼び出しの簡単な例\a.cpp 11
エラー 2 error C2065: 'cn' : 定義されていない識別子です。 C:\VC++2010\d7\関数の再帰的呼び出しの簡単な例\関数の再帰的呼び出しの簡単な例\a.cpp 12

当然ですよね。
関数の中で宣言した変数はすべてローカル変数です。
つまり関数の中でしか通用しない変数です。
cnはmainの中で宣言していますので、mainの中でしか通用しないのです。
ですから、定義されていない識別子です、と出てきてしまいます。
問題を解決するにはどうしたらよいですか。解決策は次話で。




第13講第12話へ 第2話へ

戻る

C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)