gpt4 book ai didi

c++ - 没有溢出的无限递归 - 这可能吗?

转载 作者:可可西里 更新时间:2023-11-01 16:37:34 25 4
gpt4 key购买 nike

栈溢出的原因是栈空间用完了,但是如果函数没有参数,没有数据压栈呢?这仍然留下插入“返回”地址,但在预期无限递归的情况下,这是不必要的。

所以我想问的是......是否可以使用某种调用约定,调用不会在堆栈上放置任何内容,只是跳转到第一条指令并执行,前提是最终指令将是对函数的另一个调用,直到最终执行终止?理想情况下,是否可以使用函数指针和动态链接来实现?

只是说明一下,我指的是一个接受单个参数且不返回任何内容的函数,因此从技术上讲 fastcall 就足够了,但它仍然保留了一个要返回的地址,这最终会导致溢出。可以通过某种方式避免这种情况吗?

另一个我之前没有提到的重点,我不是指单个函数的递归,例如在状态是静态的并且被重用的情况下,我的意思是从一个任意函数递归到另一个函数。

最佳答案

是的,有两种递归函数。您要找的是primitive recursive functions ,这些相当于一个简单的循环。通常用 tail recursion 实现,其中堆栈保持不变,函数永远不会通过堆栈返回。

一些 C++ compilers可能能够检测到一些原始递归函数,并将它们转换为循环构造而不是函数调用。但这仅在编译器能够识别正在发生的事情时才有效。所以答案可能是。基本上,如果程序员做了一些非常无效的事情,那么编译器可能会或可能不会提供帮助。因此,“编码、配置文件、优化、重复”的通常过程仍然存在。

关于c++ - 没有溢出的无限递归 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423836/

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