gpt4 book ai didi

recursion - 为什么这不是尾递归?

转载 作者:行者123 更新时间:2023-12-04 05:36:38 25 4
gpt4 key购买 nike

我正在阅读这本书 Real-World Functional Programming ,并且在阅读本书的示例( list 10.2,第 265 页)之前,我尝试提出自己的尾递归示例。这本书的例子有效;我的导致堆栈溢出。

我发现如果我使用元组参数或预先计算 a + accum那么我的就可以了。我想明白为什么。

let rnd = new System.Random()
let test2 = List.init 1000000 (fun _ -> rnd.Next(-50, 51))

let rec sum2 list accum =
match list with
| [] -> accum
| a::b -> sum2 b a + accum

let result = sum2 test2 0

printfn "%d" result

最佳答案

sum2 b a + accum

请注意,这被解析为 (sum2 b a) + accum ,而不是 sum2 b (a + accum) .

所以这调用 sum2 b a .然后它获取该调用的结果并添加 accum给它。所以最后评估的表达式是加法,而不是对 sum2 的调用。 .因此调用 sum2不是尾声。

关于recursion - 为什么这不是尾递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9278191/

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