我是F#的初学者,对于尾递归的概念,我仍然不能理解。具体地说,我不知道尾递归是如何工作的,因为既没有任何与累加器相关的值,也没有定义累加器。以下是用于计算阶乘的尾递归函数的一些示例代码// Keep track of both x and an accumulator value (acc) tailRecursiveFactorial (x - 1) (acc
,它以一个非空(和非惰性)列表l作为参数,并返回对应于在元素l上反复循环的lazylist。我已经实现了几个非尾递归的lcycles版本,例如: let rec inner l' = | [] -> raise基本上,我遇到了这样的问题:惰性计算是通过表单的构造来实现的这意味着我的所有递归调用都发生在
我的理解(这可能是不正确的或不完整的)是,懒惰的评估可以提供尾巴递归的所有优点,并且做得更好。 (* a a)这个函数可以很容易地转换成尾递归函数.然而,如果是这样的话,我们将失去懒惰的优势-评估。实际上,当输入是相当大的列表(或无限)时,这个非尾递归函数需要消耗许多堆栈吗?我不这样认为。那么,是否有充分的理由使