簡體   English   中英

Ruby遞歸不起作用?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM