Ruby Recursion不起作用?

Fel*_*ida 0 ruby algorithm recursion

我试图用Ruby做一个递归算法,我不能这样做,所以我不断弹出堆栈,每次我尝试一个更简单的递归算法,看看我的错误在哪里..

但我到达了这个:

def fact(n)
  if n==0
    1
  else
    fact(n)*fact(n-1)  
  end
end

puts fact(5)
Run Code Online (Sandbox Code Playgroud)

ruby/part2.rb:81: stack level too deep (SystemStackError)
Run Code Online (Sandbox Code Playgroud)

好的,发生了什么?

是不是可以在Ruby中制作递归算法?

Dob*_*boy 6

你的算法不正确,它应该是这样的

def fact(n)
  if n==0
    1
  else
   n*fact(n-1)  
  end
end

puts fact(5)
Run Code Online (Sandbox Code Playgroud)

  • 更一般地说,每次递归调用都必须减小问题的大小(通过调用`fact(n)`你保持它的大小).而且,当然,因子是按照Doboy所说的计算的. (3认同)