gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:12:16 26 4
gpt4 key购买 nike

我是 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

编译器推断出这一点是因为 x1 比较,后者属于 int 类型,因为它是一个不合格的整数文字.这意味着 x 也必须是 int 类型。

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

关于f# - 在 F# 中定义尾递归函数的累加器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38903037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com