2014-03-04 112 views

回答

5
let rec x1() = x1();() 

此函数不是尾递归。它自己调用x1();当这个调用返回时,函数将返回一个单位()。

该函数在最后调用自己;因此编译器可以执行尾部调用优化 - 这意味着递归函数调用永远不会耗尽所有堆栈空间。

本页解释尾递归:http://ocaml.org/learn/tutorials/if_statements_loops_and_recursion.html#Tailrecursion - 这是函数式编程语言使用的基本技术,因此我们可以使用递归实现循环而不会耗尽内存。

我第一次在读到Smashing The Stack For Fun And Profit时了解了工艺堆栈;我仍然认为它对流程堆栈的全部内容有最好的描述。