- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:再帰に関する質問です。)
なぜ、再帰メソッド内の「p n」をコメントアウトすると結果が正常になるのか?
このQ&Aのポイント
- 再帰メソッド内の「p n」をコメントアウトすると、再帰が正常に終了するため、最後の「p myfact.fact(3)」の結果が3になります。
- 再帰の構造では、最後に再帰メソッドが呼ばれる際に、その結果を返しつつ逆順に戻っていきます。
- 「fact(3)」の実行では、3 * fact(2)となり、再帰処理が続きます。
- みんなの回答 (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
その他の回答 (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 以上のことを踏まえてあなたの再帰関数をもう一度見直してみましょう。
質問者
お礼
ありがとうございます。理解できました。
お礼
ありがとうございます。理解できました。