[英]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.