第14講 関数の再帰的呼び出し
第1話 関数の再帰的呼び出しとは?
関数の再帰的呼び出しとは何でしょうか。
自分が自分を呼び出すことです。
といっても、何のこと何のことかわかりませんよね。
そこで、実例を作ってみましょう。
新しいプロジェクトを作り、
次のようにコーティングしてください。
#include<iostream>
using namespace std;
void f();
int main(){
f();
}
void f(){
cout<<"関数の再帰的呼び出し"<<endl;
f();
}
実行結果
そうです。これは無限ループです。
ですから、
×で閉じてください。
さて、
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の中でしか通用しないのです。
ですから、定義されていない識別子です、と出てきてしまいます。
問題を解決するにはどうしたらよいですか。解決策は次話で。
C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)