我正在使用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/