仍然是ruby的新手,并编写了这个非常简单的递归函数。
def test(input)
if input != 0
test(input-1)
end
if input == 0
return true
end
end
puts test(5)
从我的Java知识我知道这应该返回true,但事实并非如此。似乎return语句实际上并没有突破该方法。我该如何解决?感谢
答案 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