Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 递归中的堆栈内存分配_Recursion_Stack - Fatal编程技术网

Recursion 递归中的堆栈内存分配

Recursion 递归中的堆栈内存分配,recursion,stack,Recursion,Stack,我被要求写一个没有边界条件的递归函数。然后,有人问我,是否有可能将内存分配绑定到正在创建的堆栈,以便计算机不会挂起。如果是,那么如何进行?2个假设。没有边界条件意味着无限递归。计算机挂起意味着堆栈溢出或应用程序崩溃。当你们给CPU无限循环工作时,计算机总是挂起 没有正在创建的堆栈。它就在那里,当你执行一个递归调用时,你在那里分配空间,现在,在这里,我可能对参数、返回值和返回点有错误,也许还有更多错误。创建的是那些包含上下文信息的堆栈帧 您可以为参数留出所需的空间并返回0。但我认为不可能跳过返回点

我被要求写一个没有边界条件的递归函数。然后,有人问我,是否有可能将内存分配绑定到正在创建的堆栈,以便计算机不会挂起。如果是,那么如何进行?

2个假设。没有边界条件意味着无限递归。计算机挂起意味着堆栈溢出或应用程序崩溃。当你们给CPU无限循环工作时,计算机总是挂起

没有正在创建的堆栈。它就在那里,当你执行一个递归调用时,你在那里分配空间,现在,在这里,我可能对参数、返回值和返回点有错误,也许还有更多错误。创建的是那些包含上下文信息的堆栈帧

您可以为参数留出所需的空间并返回0。但我认为不可能跳过返回点。因此,对于每一级递归,您总是需要非零内存

使无限递归成为可能的唯一方法是使所需的堆栈帧大小为0,而不产生堆栈溢出。我认为这是不可能的。

他们可能指的是


如果一种语言在每次函数调用时都分配一个帧,递归通常会导致堆栈溢出。然而,大多数基于递归的语言消除了尾部调用中的帧分配。如果在执行实现尾部调用的函数期间没有分配额外的内存,那么您将在不增加内存分配的情况下运行。

所有这些问题都是向您提出的!那你想从这里得到什么?没有边界条件?所以它是一个永远不会返回的无限递归函数?我想知道,如果可能的话,怎么做?我当时没有回答这个问题。