3

まだルビーにはかなり新しいものであり、この非常に単純な再帰関数を作成しました。

  def test(input)
    if input != 0
        test(input-1)
    end
    if input == 0
        return true
    end
  end
  puts test(5)

私のJavaの知識から、これはtrueを返すはずですが、そうではありません。returnステートメントは実際にはメソッドから抜け出していないようです。これを修正するにはどうすればよいですか?ありがとう

4

2 に答える 2

6

注意深く見ると、メソッドが実際に返されることがわかりますが、スタックを1レベルだけ巻き戻し、呼び出し元でコードを実行し続けます。

問題は、返品を忘れたことです。

def test(input)
    if input != 0
        return test(input-1)
    end
    if input == 0
        return true
    end
end
puts test(5)

この修正により、結果は期待どおりになります。

true

オンラインで動作することを確認してください:ideone

于 2012-07-07T21:27:35.127 に答える
2

もう少しRubyっぽいバージョンと見なされる可能性があるのは、returnsを完全に省略して、次を使用することであることに注意してelsifください。

def test(input)
    if input != 0
        test(input - 1)
    elsif input == 0
        true
    end
end
于 2012-07-07T22:14:13.297 に答える