[英]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
进行比较,文字1
是int
类型,因为它是一个非限定的整数文字。 这意味着x
必须是int
类型。
同样,表达式acc * x
使用x
,然后编译器推断出acc
必须具有int
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.