我是F#的初学者,对于尾递归的概念,我仍然不能理解。具体地说,我不知道尾递归是如何工作的,因为既没有任何与累加器相关的值,也没有定义累加器。以下是用于计算阶乘的尾递归函数的一些示例代码// Keep track of both x and an accumulator value (acc) tailRecursiveFactorial (x - 1) (acc * x)
tailRecur
,它使用累加器样式。第二种是fact,它使用自然递归。和 (cond [else (* n (fact (- n 1)))]))
在第31节的底部,指出,自然递归版本通常与累加器版本一样快在工作中,递归样式更快。在国内,累加器的速度更快。是否没有一般的启发式来指导选择哪一种风格是普遍喜欢的?我知道累加器风格更节省内存,但是如果我们只讨论性能问题,那就不清楚