6歳の息子にPythonでプログラミングを教えはじめてみた話 3. フィボナッチ数列編
告白します。なぜフィボナッチ数列を息子くんに教えたかと言うと、足し算の問題を自分で考えるのが辛かったからですっ←
だって計算問題を作るのも大変ですし
なぜか息子くんは寝る前になると、計算問題をせがむのです。おそらく、ゲームもタブレットも漫画も全部とりあげられてしまったあとになって、鉛筆と紙だけで楽しめる遊びということで計算を楽しんでいるのだと思います。しかし、パパの立場からすると一日の仕事を終えて(ないときもありますが)頭がクタクタになっているときに、でたらめな数を書き出すのって割と疲れちゃうのです。そんなわけで、自分で問題を作り続けることができるようにするということを目的にフィボナッチ数列を教えていました。
フィボナッチ数列なら足し算の繰り返しで大きな数が作れます
フィボナッチ数列は、{1,1}のペアからはじめて、末尾の2つの数を足し合わせて新しい項を作るというものです。{1, 1, 2, 3, 5, 8, 13, ...}と続いていきます。以前にも書きましたけれど、息子くんは大きな数を作るのが好きなものですから、これをプログラムコードで見せてあげようと思ったのです。
def ふぃぼなっち(n):
ひとつめの数 = 1
ふたつめの数 = 1
for _ in range(n):
たした数 = ひとつめの数 + ふたつめの数
ひとつめの数 = ふたつめの数
ふたつめの数 = たした数
print(たした数)
厳密なことを言えばフィボナッチ数列の第1項は1のはずですが、幼稚園児向けなので細かいところはご勘弁ください。
くるくる周りながら変数が変化していきます
実際に息子くんに説明したときには、きれいな絵は書かずに、ノートに落書きしながら説明しました。変数への代入のしなおしが簡単にできることは、すっと飲み込んでもらえたので、この説明で苦労することはありませんでした。
def ふぃぼなっち(n):
ひとつめの数 = 1
ふたつめの数 = 1
for _ in range(n):
たした数 = ひとつめの数 + ふたつめの数
print( str(ひとつめの数) + " + " + str(ふたつめの数) + " = " + str(たした数))
ひとつめの数 = ふたつめの数
ふたつめの数 = たした数
プログラムコードを少し変更して、ループのたびに計算の様子を表示させてあげると、「すげー」と喜んでくれました。
おまけ
フィボナッチ数列の第n項を求めるという今回のようなお題を使って、関数の再帰的呼び出しを解説することがあります。
再帰と言えばLispということでCommonLispで書いてみました。Lispの文法は基本的にはすごくシンプルです。「(」の直後に関数名が来て、その後が引数になります。これも平仮名で書いてみたらこんな感じに・・・
思った以上に分かりやすくなりました。日本語で読むなら、もしも繰り返す数が1と言われたなら、与えられた1つ目の数と2つ目の数を足して、それを返しなさい。そうでないなら、与えられた2つ目の数を1つ目の数とし、かつまた、与えられた2つの数の和を2つ目の数とした形で、ふぃぼなっち関数を呼び出し、その値を返しなさい・・・というロジックになります。息子くんへの説明のために、Pythonループ版のロジックに沿って書いてみました。
そんな私の努力は
「ふーん」
の一言で、流されましたけど(笑)
おまけ2
この話をTwitterに貼ったら、formatで英語での読み方を作ってみたら?という示唆を頂いたので、これも作ってみました。
quitillionなんて単語はじめて見ました。
その後も
私のパソコンを見ると、「変数やらせて!」と息子くんは謎の呼びかけをしてきます。どうやらキーボードをがちゃがちゃやったり、大きな数の計算をパソコンにやらせるのが楽しいみたいです。最初はそんなもんですよね。
ScratchやSwift Playgroundに行く前に、もうちょっと算数+プログラミングで遊べることがあると思うので、もう少しいろいろ息子くんと遊んでみようと思います。
以下、投げ銭です。本文はありません。
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?