締切 授業の4日後
提出先: s4 #12 再帰
以下のうちどれか1題を選んで解答せよ。
1からnまでの整数の和を
の両方で示した上で、再帰的な定義にもとづいて
和を求めるプログラムr-add.rb
を作成せよ。
積木を三角形に積み上げた家を作る。2段の家を作るときは 2つの積木の上に1個の積木を載せて完成、3段の家を作るときは 3個の積木の上に2個の積木を載せさらにその上に1個の積木を 載せて完成。以下同様にn段の家を作るときは n個の積木から組み上げるルールで作るものとする。
このとき、n段の積木の家を作るときに 必要な積木の個数は何個か求めたい。
brick.rb
を作成せよ。円盤型の積木を三角錐のように積み上げた塔を作る。 2段の塔を作るときは1辺が2個の正三角形状に並べた3個の積木の 上に1個の積木を 載せて完成。3段の塔を作るときは1辺が3個の正三角形状に 並べた6個の積木の上に3個の積木を正三角形状に並べ、 さらにその上に1個の積木を載せて完成。 以下同様にn段の塔を作るときは1辺がnの 正三角形状に並べた積木の上に1辺がn-1個の 正三角形状の積木を置いて行って組み上げるものとする。
問題2と同様の考え方で、n段の塔を
作るのに必要な積木の個数を求めるプログラム
tower.rb
を作成せよ。定義するメソッドはすべて
再帰的定義にすること。
1から100までの乱数50個が入っている配列は
x = Array.new(50){rand(100)+1}
とすることで変数xに得られる。このxの中で、
最大の値を再帰的な方法で得るメソッド saidai
を定義し、それを用いて配列中の要素の最大値を求めるプログラム
a_max.rb
を作成せよ。
ヒント: 再帰的手順は以下の要領である。
x.length
)が1なら
最大値は x[0]
である。x[0]
)x[1..-1]
)の最大値のどちらか大きい方が最大値である。
※注意※
再帰的な考え方を使わないプログラムは不正解とする。
今回のプログラムは無限ループに陥り、止まらなくなるものを つくってしまう可能性がきわめて高い。プログラムを動かしてもすぐに反 応が返らないときはキーボードで C-c を押してすぐに止める ようにする。プログラムを暴走させたままだと、システムが重くなり他人 に迷惑がかかるので十分に注意すること。
プログラムが完成しなくても、途中まで粘った過程のものを つけて提出せよ。なぜ動かないかの予想を説明に書くこと。 予想が的確であれば完成したのと同等の評価となる。ただし、 文法エラーのないものに限る。