求和函数
下面是一个非尾递归函数,用于计算整数列表的总和。
let rec sum = function
| [] -> 0
| h::t -> h + (sum t)
该函数执行的最后一个操作是添加。因此,该函数不是尾递归的。
下面是相同函数的尾递归版本。
let sum l =
let rec aux acc = function
| [] -> acc
| h::t -> aux (acc+h) t
in
aux 0 l
这里,aux
函数是尾递归的:它执行的最后一个操作是调用自身。因此,sum
的后一版本可以与任何长度的列表一起使用。