Recursion 这两个递归ocaml函数之间有什么区别?

Recursion 这两个递归ocaml函数之间有什么区别?,recursion,stack,overflow,ocaml,Recursion,Stack,Overflow,Ocaml,调用x1();;调用x2();;时生成堆栈溢出;;使程序无限期运行。这两种功能之间有什么区别 let rec x1() = x1();() let rec x2() = x2();; 此函数不是尾部递归函数。它称自己为x1();当这个调用返回时,函数将返回一个unit() 这个函数在最后调用自己;因此,编译器可以执行尾部调用优化,这意味着递归函数调用永远不会占用所有堆栈空间 本页解释尾部递归:-它是函数式编程语言使用的一种基本技术,因此我们可以使用递归实现循环,而不会耗尽内存 我在阅读时第一次

调用x1();;调用x2();;时生成堆栈溢出;;使程序无限期运行。这两种功能之间有什么区别

let rec x1() = x1();()
let rec x2() = x2();;
此函数不是尾部递归函数。它称自己为x1();当这个调用返回时,函数将返回一个unit()

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

本页解释尾部递归:-它是函数式编程语言使用的一种基本技术,因此我们可以使用递归实现循环,而不会耗尽内存

我在阅读时第一次了解了进程堆栈;我仍然认为它最好地描述了进程堆栈的全部内容

let rec x1() = x1();()
let rec x2() = x2();;