第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("世界が広がいます。");
}
の解答例
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つの子分が互いに呼び出し無限ループにってしまう例を、考えましょう。
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)