小波です。 >オンラインのRubyチュートリアルを読みながらプログラミングを学習している小倉と申します。 >http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=08 >のenglishNumberメソッドの再帰法を用いたほうのプログラムについて、質問です。 >たとえば、englishNumber 100としたとき、このメソッドでなぜ最初に「one」という単語がnumStringに入るのかが分かりません。 >再帰法でメソッドを書くと、再帰的に呼び出した後どのように処理が流れるのかが分かりません。 状況が分からないので,的確なお答えになるかどうか分かりませんが,処理の 流れを知るために有効なのは,適当なデバグラインを入れてやって,実行 の途中経過を吐き出させることです。そんなの分かっている,というのでし たら,後は読まなくても結構です。 で,このソースの場合, def englishNumber number の行の直後に, puts "01: #{number}" とか入れてやれば,再帰的に呼び出されたときにどのような引数を 渡されているかがわかりますし,何度呼び出されたかも分かります。 あと,if による分岐がどう起こっているのかを知るためには別に デバグラインを入れましょう。その他,様子を知りたいところに 必要なデバグラインを埋め込んでやれば,流れを追えると思います。 なお,初級者への再帰的な処理の流れの導入としては,このプログ ラムはやや長くてかつ英語の数詞の知識の整理も必要で,あまり適切で はないと思います。定石どおりに階乗の計算やハノイの塔あたりの 問題のほうが勉強しやすいのではないでしょうか。 ところで,次のソースの処理の流れは分かりますね? def hoge(n) puts "n = #{n}" if n == 0 then puts "Done." return 0 else puts "Go!" return hoge(n-1) end end hoge(3)