【发布时间】:2015-06-06 15:19:00
【问题描述】:
我有这个代码:
let rec combinations acc listC =
match listC with
| [] -> acc
| h::t ->
let next = [h]::List.map (fun t -> h::t) acc @ acc
combinations next t
它看起来是尾递归的,但我不断收到堆栈溢出。关于如何使它工作的任何想法?
【问题讨论】:
-
你在哪里得到堆栈溢出? FSI?,单声道? - 您启用了 TCO?
-
你能显示从这段代码生成的 IL 吗?
-
这应该是尾递归的 - 很可能您没有启用 TCO 或者问题出在其他地方 - 顺便说一句:您开始的列表有多大?也许你应该考虑改用 seqs
-
我在两个地方使用过它,一个是带有 ExcelDNA 的 .xll,第二个是 websharper(调试)中的服务器端函数
标签: f# tail-recursion