求和函式
下面是一個非尾遞迴函式,用於計算整數列表的總和。
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
的後一版本可以與任何長度的列表一起使用。