繁体   English   中英

在F#中定义尾递归函数的累加器

[英]Defining the Accumulator of a Tail Recursive Function in F#

我是F#的初学者,我仍然无法绕过尾递归的概念。 具体来说,我不知道尾递归是如何工作的,因为既没有与累加器相关的任何值,也没有定义累加器。

下面是一些用于计算阶乘的尾递归函数的示例代码

let factorial x =
// Keep track of both x and an accumulator value (acc)
    let rec tailRecursiveFactorial x acc =
        if x <= 1 then 
            acc
        else 
            tailRecursiveFactorial (x - 1) (acc * x)
    tailRecursiveFactorial x 1

我不是要求如何编写尾递归函数,也不是要求尾部和非尾递归函数的示例。 我要问的是累加器是如何工作的,因为它从未定义过

累加器在这里定义:

let rec tailRecursiveFactorial x acc =

这个本地函数的类型为int -> int -> int ,这意味着acc类型为int

编译器推断出这是因为x与文字1进行比较,文字1int类型,因为它是一个非限定的整数文字。 这意味着x必须是int类型。

同样,表达式acc * x使用x ,然后编译器推断出acc必须具有int类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM