【发布时间】:2017-07-12 19:33:25
【问题描述】:
我正在使用尾递归编写一个函数,但我不知道如何执行。 通常,我使用 ocaml QuicksortTail.ml Qsort,但是当我对具有 70000 个元素的列表执行时会显示错误:
致命错误:异常 Stack_overflow"
let rec trev l r =
match l with
| [] -> r
| x::xs -> trev xs (x::r);;
let rev l = trev l [];;
List.iter (fun x->print_int x) (rev[5;4;3;2;1])
我的 oCaml 是 4.01。
【问题讨论】:
-
您的程序在我的机器上运行良好。请注意,使用尾递归函数不需要做任何特别的事情,它是编译器在适用时自动完成的优化。
-
是的,它可以工作,但是当我执行一个带有 70000 的列表时,会显示错误
-
@JulianaSouza 生成长列表的代码可能不是尾递归的。
-
您能告诉我们您是如何生成包含 70000 个元素的列表的吗?正如 Anton 所建议的,这可能是错误发生的地方。
-
@RichouHunter ,问题就在这里!谢谢!
标签: ocaml tail-recursion