第5講 メソッド(1)
第3話 2人の社員がお互いに仕事を依頼し合うとどうなる?
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
  class Program //初心者はお呪い=決まり事と思い一切気にしない
  {
    static void Main(string[] args) //私は社長だ。
    {
      f(); //社員f()に仕事を命じている。
    }
    static void f()
    {
      Console.WriteLine("こんにちは!");
      g(); //社員g()に仕事をお願いしている。
    }
    static void g()
    {
      Console.WriteLine("今日は良い天気ですね。");
      f(); //社員f()に仕事をお願いしている。
    }
  }
}
とすると、
001
が続いた後、
002とエラーしてしまいます。
このようなときはプログラムの終了を押して下さい。

途中でエラーしてしまった原因は、
このプログラムだと無限ループになってしまうからです。
私の実験によると、
仕事の依頼は4700回程度
(正確には覚えていませんし、これはC++の場合です。
C#の場合も似たようなものだと思います。)

が上限なのです。
その上限回数をこのプログラムだとあっという間に超えてしまします。

なぜ無限ループになってしまうのかと申しますと、
ちょうど鏡を平行に置くと無限に鏡が映し出されるのと同じ状態だからです。
f()→g()→f()→g()→f()→g()→・・・
ですね。仕事の依頼が無限に連鎖してしまいます。
無限ループは、プログラミングにおいては宿痾です。
ただし、すでにアプリやソフトと名付けたプログラムにおいては、
意図的に無限ループを利用していますし、
ゲームプログラミングは基本的に無限ループを使います。
この例外を除いては、無限ループとの戦いがプログラミングであるといっても、
決して大げさとはいえないほど、
うっかりすると無限ループの罠にはまってしまうことがあるのです。

エラーしないようにするには、
回数をカウントする変数を導入します。
プログラムソースを次のように変更して下さい。
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
  class Program //初心者はお呪い=決まり事と思い一切気にしない
  {
    static void Main(string[] args) //私は社長だ。
    {
      f(
0); //社員f()に仕事を命じている。
    }
    static void f(
int k)
    {
      
k++;
      Console.WriteLine("こんにちは!");
      g(
k); //社員g()に仕事をお願いしている。
    }
    static void g(
int k)
    {
      Console.WriteLine("今日は良い天気ですね。");
      if (k < 5) f(
k); //社員f()に仕事をお願いしている。
    }
  }
}
実行画面
こんにちは!
今日は良い天気ですね。
こんにちは!
今日は良い天気ですね。
こんにちは!
今日は良い天気ですね。
こんにちは!
今日は良い天気ですね。
こんにちは!
今日は良い天気ですね。

ちょうど5回表示してプログラムが終わりました。






第2話へ   第4話へ
 
002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ