调用递归函数时如何分配内存?一个函数有它自己分配的内存。当调用它时,参数(而不是引用传递的参数)和变量将获得内存。因此,当函数从其体内再次调用时,内存是如何分配给第二个调用的变量和参数的?
发布于 2014-04-21 05:32:50
递归函数与任何其他函数没有什么不同--自动局部变量被分配为单个块,方法是将堆栈指针向前推进到足以计算其大小之和(加上对齐所需的任何填充)。
每个递归调用都以这种方式推送一个新堆栈框架,然后当它返回时弹出它。如果递归未能到达基本情况,堆栈将迅速耗尽,从而导致同名堆栈溢出崩溃。
发布于 2014-04-21 05:30:27
递归调用函数就像任何其他函数一样。因此,内存的分配方式与调用任何常规函数的方式相同。
发布于 2014-04-21 05:30:35
它与调用任何其他函数相同。变量(而不是引用传递的变量)被分配到堆栈上。当函数开始返回时(即到达基本情况),堆栈将按每次嵌套递归调用中推到堆栈的顺序弹出。
这个youtube视频很好地解释了递归函数的调用堆栈:https://www.youtube.com/watch?v=k0bb7UYy0pY
https://stackoverflow.com/questions/23191320
复制相似问题