这是 7 个月前的一个老问题,当时堆栈溢出者同意 Haskell 计算 Ackermann 函数的效率低下是由于编译器错误造成的。
7个月后,这似乎是固定的。似乎 ack 使用线性内存运行,但运行速度非常慢。
main = print (ack 4 1)
-- Ackermann function
ack 0 n = n + 1
ack m 0 = ack (m-1) 1
ack m n = ack (m-1) (ack m (n - 1))
$ time ./ack
65533
>real 8m53.274s
>user 8m47.313s
>sys 0m4.868s
Processor 2.8 GHz Intel Core i7
Memory 8 GB 1333 MHz DDR3
Software Mac OS X Lion 10.7.5 (11G63)
我只是要求对此有任何见解。更详细的将获得投票。请记住,我是函数式编程的新手,即使是关于尾递归与常规递归的简单评论也会受到赞赏和支持。