3

对 ruby​​ 来说还是相当新的,并且编写了这个非常简单的递归函数。

  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

如果您仔细观察,您会发现该方法确实返回了,但它只是将堆栈展开一层并继续在调用者中执行代码。

问题是您忘记了退货:

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-ish 的版本是return完全省略 s 并使用elsif

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