相关疑难解决方法(0)

如何实现尾递归列表追加?

像这样的简单追加函数(在F#中):

let rec app s t =
   match s with
      | [] -> t
      | (x::ss) -> x :: (app ss t)
Run Code Online (Sandbox Code Playgroud)

当s变大时会崩溃,因为函数不是尾递归的.我注意到F#的标准追加功能不会因大列表而崩溃,因此必须以不同方式实现.所以我想知道:追尾的尾递归定义怎么样?我提出了这样的事情:

let rec comb s t =
   match s with
      | [] -> t
      | (x::ss) -> comb ss (x::t)
let app2 s t = comb (List.rev s) t 
Run Code Online (Sandbox Code Playgroud)

哪个有效,但看起来很奇怪.是否有更优雅的定义?

f# tail-recursion append

9
推荐指数
2
解决办法
6789
查看次数

标签 统计

append ×1

f# ×1

tail-recursion ×1