[#43494] ブロックとともに呼び出されたsortについて — "Toshiyuki Ogura" <oguradio@...>

小倉です。

12 messages 2007/05/15

[#43508] rubyのテキストについて — 桑江 康公 <ykuwae@...>

はじめまして、桑江といいます。プログラム開発の勉強をはじめたいと考えています。いろいろと調べたのですが、オブジェクト指向を使った開発が現在しりゅうとのことで、Javaを勉強しようと考えていたのですが、rubyという言語もあるということがわかりネットで調べたところこのメーリングリストにたどり着きました。どなたかプログラム開発初心者でもわかりやすい本またはサイトがありましたら教えていただけないでしょうか?ちなみに、私のレベルはHTMLが少しわかる程度です。

8 messages 2007/05/15

[ruby-list:43474] Re: 再帰法について

From: "Hideo Konami" <konami@...>
Date: 2007-05-06 06:00:37 UTC
List: ruby-list #43474
小波です。

>オンラインの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)






In This Thread