我是F#的初学者,对于尾递归的概念,我仍然不能理解。具体地说,我不知道尾递归是如何工作的,因为既没有任何与累加器相关的值,也没有定义累加器。以下是用于计算阶乘的尾递归函数的一些示例代码// Keep track of both x and an accumulator value (acc) tailRecursiveFactorial (x - 1) (acc * x)
一个简单的附加函数,如下所示(在F#中): match s with | (x::ss) -> x :: (appss t)
当s变大时会崩溃,因为函数不是尾递归的。我注意到F#的标准append函数不会在大列表中崩溃,所以它必须以不同的方式实现。所以我想知道: append的尾递归定义是什么样子的?