我正在使用Ruby v1.9.1为我在大学类的人使用Ackermann函数编写程序。代码如下:

def ackermann(n,m)
  if n == 0 && m > 0
    return m+1
  elsif n > 0 && m == 0
    return ackermann(n-1,1)
  elsif n > 0 && m > 00
    return ackermann(n-1,ackermann(n,m-1))
  else
    puts "Wrong input, m and n must be higher than 0"
  end
end

puts ackermann(5,5)

这是一个高度递归的函数。所以我得到了错误“堆栈级别太深(SystemStackError)”。有什么方法或解决方法来解决此错误?

最佳答案

记住递归调用。制作一个{[int,hyperlong] => hyperlong}的映射,以使用动态编程方法来耗尽堆栈空间。

这是一个C++示例:http://pastebin.com/tVQ7yB31

已知的错误:ack(3,10)占用了超过3 GB的堆内存。

关于ruby - Ruby中具有Ackermann函数的"Stack level too deep",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8022594/

10-12 18:43