【发布时间】:2021-10-11 16:01:54
【问题描述】:
当我在很长的输入上运行以下函数时,我正在使用 utop 运行 Ocaml:
let string_to_list str =
let rec loop i limit =
if i = limit then []
else (String.get str i) :: (loop (i + 1) limit)
in
loop 0 (String.length str);;
它返回以下错误:
Stack overflow during evaluation (looping recursion?).
函数的尾递归版本是什么?
【问题讨论】:
-
当然,它不会是一个
stack overflow超过输入较小长度的字符串。你尝试了什么样的输入,它溢出了什么样的输入?这件事有时会帮助您理解......为什么需要tail-recursive解决方案而不是recursive解决方案,这种情况几乎适用于我们将使用的每种功能语言。否则,recursive样式是指定解决方案的最清晰、简洁和优雅的方式。
标签: ocaml stack-overflow tail-recursion