对 ruby 来说还是相当新的,并且编写了这个非常简单的递归函数。
def test(input)
if input != 0
test(input-1)
end
if input == 0
return true
end
end
puts test(5)
根据我的 Java 知识,我知道这应该返回 true,但事实并非如此。似乎 return 语句实际上并没有脱离方法。我该如何解决?谢谢
对 ruby 来说还是相当新的,并且编写了这个非常简单的递归函数。
def test(input)
if input != 0
test(input-1)
end
if input == 0
return true
end
end
puts test(5)
根据我的 Java 知识,我知道这应该返回 true,但事实并非如此。似乎 return 语句实际上并没有脱离方法。我该如何解决?谢谢
如果您仔细观察,您会发现该方法确实返回了,但它只是将堆栈展开一层并继续在调用者中执行代码。
问题是您忘记了退货:
def test(input)
if input != 0
return test(input-1)
end
if input == 0
return true
end
end
puts test(5)
使用此修复程序,结果如预期:
true
在线查看它:ideone
请注意,可能会被视为稍微更 Ruby-ish 的版本是return
完全省略 s 并使用elsif
:
def test(input)
if input != 0
test(input - 1)
elsif input == 0
true
end
end