Haskell有尾递归优化吗?
我今天在unix中发现了“time”命令,并认为我会用它来检查Haskell中尾递归和正常递归函数之间运行时的差异。
我写了以下函数:
--tail recursivefac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1 y = y fac' x y = fac' (x-1) (x*y) --normal recursivefacSlow :: (Integral a) => a -> a facSlow 1 = 1facSlow x = x * facSlow (x-1)
这些都是有效的,记住它们只是用于这个项目,所以我没有费心去检查零或负数。
但是,在为每个编写main方法,编译它们并使用“time”命令运行它们时,两者都具有相似的运行时,正常的递归函数使尾递归函数边缘化。这与我在lisp中关于尾递归优化的内容相反。这是什么原因?
慕仙森
相关分类