我开始学习 ocaml,并且非常欣赏这种语言中递归的力量。但是,我担心的一件事是堆栈溢出。
如果ocaml使用堆栈进行函数调用,最终不会溢出堆栈吗?例如,如果我有以下功能:
let rec sum x =
if x > 1 then f(x - 1) + x
else x;;
它最终必须导致堆栈溢出。如果我要在 c++ 中做同样的事情(使用递归),我知道它会溢出。
所以我的问题是,是否有内置的保护措施来防止函数式语言溢出堆栈?如果不是,它们是不是像这样不那么有用,因为上面的求和算法,以带有 for 循环的程序风格编写,可以处理任何数字(不考虑整数溢出)?