我正在阅读 实用函数式编程 这本书,尝试在阅读书中的例子之前想出自己的尾递归示例(参见列表 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