第8講 社員が自分自身に仕事を命令する=メソッドの再帰的使用

第1話 自分が自分に命令するってどういうこと?
とても不思議なテーマ名です。
社員が自分自身に命令するってどういうことでしょうか。
普通は、仕事の依頼は自分以外の人にしますよね。
自分が自分に仕事を依頼したり、命令したりはしませんよね。
ところが、プログラミングの世界では、
どの言語でも自分が自分に命令することができるようになっています。
プログラミングの単位=プログラミングの細胞を
RubyやJavaではメソッド、
C言語やC++では関数あるいはメンバー関数、
VBやVBAではプロシージャといいますが、
メソッドも関数もプロシージャもいずれも自分が自分に命令を下すことが出来ます。

この講義の特徴は、
専門用語を極力用いないこととなるべく事例=具体例から考えることです。
今回も、具体例を出してから説明しましょう。
次のようなコードを組んで下さい。
#! ruby -Ks
def f
 print "メソッドの再帰的使用\n"
 f
end
f
参考ダウンロード添付ファイル
実行結果
rioij
が続き、最後
qefv
となり、プログラムが強制的に終了されています。
実は、C++辺りでは、このプログラムは永遠に走り続けます。
プログラムを実行することをプログラムを走らすといいます。
理由は、fがfに命令するということが無限に続けられるからです。
プログラミングの宿痾は、無限ループです。
気をつけてプログラミングをしないと、
すぐに無限ループに陥ってしまいます。
どうして無限ループとなりますかと申しますと、
fがfに命令→fに命令されたfがfに命令→fに命令されたfによって命令されたfがfに命令→・・・・
わかりやすい例えは、鏡を2枚平行においた状態を考えればよいでしょうか。

fがfに命令とはどういうことでしょうか。
私は、メソッドの再帰的使用の説明では、
入れ子式人形の例えで説明します。
命令するfと命令されるfは、
外側の人形と入れ子式に入っている人形の関係です。
姿が似ている人形が、中に入っているのが入れ子式人形ですが、
命令するfと命令されるfは、姿が似ていますが、
人形が異なるように、別のメソッドです。
私は、次元の異なるfとよく表現します。
fがfに命令した瞬間に、fの分身fが発生しているのです。
ですから、先の説明は
fがfの分身に命令→fの分身がfの分身の分身に命令→fの分身の分身がfの分身の分身の分身に命令→・・・
といった方が正確でしょう。

さて、無限ループを避けるために、
コードを次のように変更しましょう。
#! ruby -Ks
def f(n)
 print "メソッドの再帰的使用\n"
 if n<10 then
  f(n+1)
 end
end
f(0)
参考ダウンロード添付ファイル
実行結果
wqiyn
10回で停止しました。

社員を1人しか採用していないのに、
分身の術を使って、
社員が10人いるのと同じ状態になっているわけです。

結局、メソッドの再帰的使用とは分身の術です。
分身の術を使えば、
第7講の魔方陣自動生成は、簡単に作れます。
魔方陣の自動生成に入る前に、
分身の術をつかって、
1+2+3+・・・+100

1×2×3×・・・×10
等を実行してみましょう。
cihwq
qwf

第7講第9話へ 第2話へ


004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
vba 2013 2010 2007 入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門第1部へ
本サイトトップへ