第2講 関数を理解しよう

第4話 同じ子分を複数回使う
入門の解答例
入門
using namespace System;
void f1();
void f2();
void f3();
void f4();
void main(){
   f1();
   f2();
   f3();
   f4();
}
void f1(){
   Console::Write("C言語の学習");
}
void f2(){
   Console::WriteLine("は楽しい。");
}
void f3(){
   Console::WriteLine("ですから、継続して学びましょう。");
}
void f4(){
   Console::WriteLine("世界が広がいます。");
}
C言語の解答例
C言語
using namespace System;
void f1();
void f2();
void f3();
void f4();
void main(){
   f1();
   f2();
   f3();
   f4();
   f1();
   f2();
   f3();
   f4();
}
void f1(){
   Console::Write("C言語の学習");
}
void f2(){
   Console::WriteLine("は楽しい。");
}
void f3(){
   Console::WriteLine("ですから、継続して学びましょう。");
}
void f4(){
   Console::WriteLine("世界が広がいます。");
}


後半の使い方に注目して下さい。
同じ部品は何度でも利用可能です。
同じ子分に何回も仕事を命じることができるのです。

第2講では、すべて親分が子分に命令してきましたが、
実は、子分が子分に命じることもできます。
例えば、
using namespace System;
void f1();
void f2();
void f3();
void f4();
void main(){
   f1();
   f2();
   f3();
   f4();
}
void f1(){
   Console::Write("C言語の学習");
}
void f2(){
   Console::WriteLine("は楽しい。");
}
void f3(){
   Console::WriteLine("ですから、継続して学びましょう。");
}
void f4(){
   Console::WriteLine("世界が広がいます。");
}

using namespace System;
void f1();
void f2();
void f3();
void f4();
void main(){
   f1();
}
void f1(){
   Console::Write("C言語の学習");
   f2();
   f3();
   f4();
}
void f2(){
   Console::WriteLine("は楽しい。");
}
void f3(){
   Console::WriteLine("ですから、継続して学びましょう。");
}
void f4(){
   Console::WriteLine("世界が広がいます。");
}
とすることもできます。
しかし、子分が親分に命令することはできません。
やはり、親分の方が偉いからです。
仕事を命じると表現していますが、
正確には、関数が関数を呼び出すといいます。
ところで、子分が他の子分に仕事を命令していますが、
void f1(){
   Console::Write("C言語の学習");
   f2();
   f3();
   f4();
}
子分が自分自身に仕事を命令することできるでしょうか。
つまり、
void f1(){
   Console::Write("C言語の学習");
   f1();
}
とすることはできるのでしょうか。
試しにビルドしてみると
初心者
こういうのを無限ループといいます。
仕事を命じると表現していますが、
正確には、関数が関数を呼び出すといいます。
後に学習しますが、関数が自分を呼び出すことを関数の再帰的呼び出しといいますが、
この再帰的呼び出しは条件を付けないと無限ループになってしまいます。
鏡を2枚向かい合わせに並行に並べると、鏡の中に鏡が無限に出てきてしまいます。
それと同じ状態になってしまうのです。
何故でしょうか。
f1()はf1()を呼び出します。
呼び出されたf1()は再びf1()を呼び出します。
そのf1()が再びf1()を呼び出します。
こういうことが無限に繰り返されてしまいます。
無限ループを起こした場合は、一番右上の入門の×によってコンソールを閉じます。

プログラミングは、実は気をつけないとしばしば無限ループを起こします。
無限ループと計算爆発(計算量が爆発的に増えていきコンピュータが手に負えなくなることを指します。)
はプログラミングにおける2つの宿痾です。
病気にならないようにプログラマーが、常に配慮しないといけないのです。


鏡の例に、よりぴったりの2つの子分が互いに呼び出し無限ループにってしまう例を、考えましょう。

第3話へ 第5話へ


戻る



VB講義へ
VB講義基礎へ

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