[英]Ruby Recursion doesn't work?
我试图用Ruby创建递归算法,但是我做不到,所以我一直按原样弹出堆栈 ,每次尝试使用更简单的递归算法来查看错误所在时。
但是我到达了这里:
def fact(n)
if n==0
1
else
fact(n)*fact(n-1)
end
end
puts fact(5)
和
ruby/part2.rb:81: stack level too deep (SystemStackError)
好的,这是怎么回事?
不能在Ruby中创建递归算法吗?
您的算法不正确,应该看起来像这样
def fact(n)
if n==0
1
else
n*fact(n-1)
end
end
puts fact(5)
fact(n) * fact(n - 1)
是无限递归。 您需要减少每个呼叫中的问题大小。
def fact(n)
if n <= 0
1
else
n * fact(n - 1)
end
end
或者简单地说,
def fact(n)
n <= 0 ? 1 : n * fact(n - 1)
end
您必须执行诸如fact(n-1)* fact(n-2)之类的操作,因为否则,将永远调用fact(n),n = 5。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.