gpt4 book ai didi

recursion - 这两个递归 ocaml 函数有什么区别?

转载 作者:行者123 更新时间:2023-12-03 06:56:54 24 4
gpt4 key购买 nike

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

调用 x1();;调用 x2();; 时会产生堆栈溢出导致程序无限期运行。这两个函数有什么区别?

最佳答案

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

该函数不是尾递归的。它称自己为x1();当这个调用返回时,函数将返回一个unit()。

let rec x2() = x2();;

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

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

当我阅读 Smashing The Stack For Fun And Profit 时,我第一次了解了进程堆栈。 ;我仍然认为它是对进程堆栈的最好描述。

关于recursion - 这两个递归 ocaml 函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com