• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:再帰に関する質問です。)

なぜ、再帰メソッド内の「p n」をコメントアウトすると結果が正常になるのか?

このQ&Aのポイント
  • 再帰メソッド内の「p n」をコメントアウトすると、再帰が正常に終了するため、最後の「p myfact.fact(3)」の結果が3になります。
  • 再帰の構造では、最後に再帰メソッドが呼ばれる際に、その結果を返しつつ逆順に戻っていきます。
  • 「fact(3)」の実行では、3 * fact(2)となり、再帰処理が続きます。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

#1の方の指摘通りです。 def fact(n) return 1 if n == 0 n * fact(n - 1) p n end でn=3の場合のfactの戻り値は 明示的にreturn文で戻り値を指定していないため、 p nの評価結果になります。p n の評価結果は3なので戻り値は3になります。 factの内容を以下のように変えてください。 あなたの望んだ結果が得られるでしょう。 def fact(n) return 1 if n == 0 seki = n * fact(n - 1) p n return seki end

tukutukuhosi
質問者

お礼

ありがとうございます。理解できました。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

ruby は return でメソッドを抜けなかった場合メソッド内で最後に評価した値をそのメソッドの戻り値とします。 http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fdef.html#eval_method また、 p も値を返します。 http://docs.ruby-lang.org/ja/2.1.0/class/Kernel.html#M_P 以上のことを踏まえてあなたの再帰関数をもう一度見直してみましょう。

tukutukuhosi
質問者

お礼

ありがとうございます。理解できました。

関連するQ&A