回报不打破红宝石?

时间:2012-07-07 21:23:26

标签: ruby

仍然是ruby的新手,并编写了这个非常简单的递归函数。

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

从我的Java知识我知道这应该返回true,但事实并非如此。似乎return语句实际上并没有突破该方法。我该如何解决?感谢

2 个答案:

答案 0 :(得分:6)

如果你仔细观察,你会看到该方法确实返回,但它只将堆栈展开一级并继续在调用者中执行代码。

问题是你忘记了回复:

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

使用此修复程序,结果符合预期:

true

查看在线工作:ideone

答案 1 :(得分:2)

请注意,可能被视为稍微多一点的Ruby-ish版本将完全省略return,并使用elsif

def test(input)
    if input != 0
        test(input - 1)
    elsif input == 0
        true
    end
end