Subject: 再帰 2 To: ruby-11-14@e.koeki-u.ac.jp Date: Tue, 18 Nov 2014 22:26:32 +0900 (JST) X-Mailer: Mew version 6.3 on Emacs 23.4 / Mule 6.0 (HANACHIRUSATO) 氏名: peach 学籍番号: c1131053 クラス: 07 ・選択した番号 2番 ・作成したプログラム本体 #!/usr/koeki/bin/ruby # coding: utf-8 def total(n) if n <= 1 1 else n + total(n-1) end end if ARGV[0] == nil STDERR.puts "作りたい積み木の塔の段数を指定して下さい" STDERR.puts "例: ./brick.rb 5" exit 0 end n=ARGV[0].to_i printf("%d段の塔に必要な個数は%d個です\n", n, total(n)) ・プログラムの説明(再帰の部分の詳説) 再帰の部分(4〜10行目)を説明。 今回の場合、n段目に置く積み木の数はn個なので、n + total(n-1)を再帰を利用 すると計算される。ただし、このままだとnが曖昧な状態になってしまうので、 最初に、n <= 1 と書くことで、nの値が1か、それより小さい場合、1を返すとい うただし書きをつけ足した。このことにより、nが1の場合1を返し、それ以外で あればn + total(n-1)を再帰的に計算されるメソッドが出来た。 ・実行結果 joy{c113105}% ./brick.rb 5 [~/Ruby] 5段の塔に必要な個数は15個です joy{c113105}% ./brick.rb 9 [~/Ruby] 9段の塔に必要な個数は45個です joy{c113105}% ./brick.rb 74 [~/Ruby] 74段の塔に必要な個数は2775個です ・参考文献 広瀬雄二."再帰処理"(参照2014-11-18) http://roy/~yuuji/2014/pf2/06/index.html ・感想 授業では紙を使ったクイックソートしか理解しなかったので、実際に課題に取り 組んだ際、 n + total(n-1)などを単なる計算のメソッドだと思ったので、たと えば5を指定したときに、5 + (5-1) =9 にならなかったことで理解に苦しんでい た。しかし、どんどんnの一番下を探してから帰りながら計算していくのが再帰 なのだと、先生のページの図を見て理解できた。 最近は自分で理解できるようになって、楽しくもなってきた! 3番は、高校で習った少し複雑な計算を使うのだと思ったが、それが思いだせな くて諦めた(泣)