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

第2話 分身の術による1から100までの和など
cihwq
を実現するプログラム例
#! ruby -Ks
def f(n)
 if n>0 then
  a=f(n-1)
 else
  return 0
 end
 return a+n
end
print "1から100までの和=",f(100),"\n"
参考ダウンロード添付ファイル

qwf
を実現するプログラム例
def f(n)
 if n>0 then
  a=f(n-1)
 else
  return 1
 end
 return n*a
end
print "1から10までの積=",f(10),"\n"
参考ダウンロード添付ファイル

どうプログラミングをしてよいか分からず、
今回の解答例を見てしまった方たくさんいらっしゃると思います。
たったの9行のプログラムでも、
難しいですよね。
解答を見てしまって情けないと思う必要はないですよ。
1から100までの和を実現するプログラムでも、
1から10までの積を求めるプログラムでも、
難解です。

和の方から見ていきましょう。
#! ruby -Ks
def f(n)
 if n>0 then
  a=f(n-1)
 else
  return 0
 end
 return a+n
end
print "1から100までの和=",f(100),"\n"
でどうして1から100までの和が求められるのでしょうか。
入れ子式人形の例えで考えるとわかりやすいと思います。
実は、入れ子式人形の内への旅は、
自分の本質探しです。
自分が分からずより深く自分の中へ遡及していく旅です。
ごめんなさい、遡及と小学生には分からない言葉を使ってしまいました。
遡及は、遡るという意味ですが、
より内側に進入するという意味です。
f(n)がなんであるかを知るためには、
f(n-1)がなんであるか分からなければなりません。
では、どこまで遡ればよいのでしょうか。
nが0になるまでです。
nが0ときが、1番内側の人形です。
そして、はじめて自分の本質を発見します。
  return
0
なんと0です。
自分探しの旅をして、より深く自分の中へ遡及していって、
一番奥にあったものは、0です。
つまり、何もなかったのです。
この0は、お人形の番号0(n)とは違います。
1番内側の人形の番号が0なのですが、
その人形の中身が0です。
1番内側の人形の中身は、
プログラムによって違います。
実際積の方では、
def f(n)
 if n>0 then
  a=f(n-1)
 else
  return
1
 end
 return n*a
end
print "1から10までの積=",f(10),"\n"
1番内側の人形=番号0の人形の中身は1です。

人形の中身という言い方が、?という方は、
入れ子式の人形というより、入れ子式の箱をイメージした方がよいかも知れません。
箱の中に箱が入っている。
1番内側の箱を取り出して、中身を見てみたら、
和のプログラムの方は中身が0であり、積の方は中身が1であったわけです。

和のプログラムの方は、「俺って空っぽ?」って思うでしょう。
でも、がっかりする必要はないんですよ。
今回の和のプログラムもそうですが、
人間の本質とは、過程そのものにあるのです。
一所懸命何かをやっている過程=努力こそが人間の本質なのです。
この和のプログラムも過程こそがすべてです。
私は、結果オーライという考え方は、
特殊資本主義的な考え方であると思っています。
(小学生のために,説明しておくと、
人類の歴史の中でほんの一時期に支配的になっている考え方にすぎないということです。
後年の歴史家達は、「結果も大事だが結果に至る過程も大切だ」
という考え方を取った時期の方が人類の歴史の圧倒的部分を占めている、
と述べることでしょう。)
結果がすべてという考え方は、間違っていると考えているわけです。
大事なのは結果に至る過程であり、努力です。
勝負事では当たり前の話です。
勝っても今日の試合について反省しない人は成長しません。
小学生の皆さん、テストの点数も大事ですが、
努力の過程も大切です。
結果だけで物事を考えないようにしましょう。

さて、比喩は終わりにして、
どうして和が計算できるのかを次話で説明しましょう。




第1話へ 第3話へ


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部へ
本サイトトップへ