gpt4 book ai didi

c - 当我们递归调用一个函数时,它涉及一个单独的调用堆栈还是每次调用一个函数?

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:52 26 4
gpt4 key购买 nike

当在下面的代码中我从 main() 调用函数 fact() 时,这个 fact() 的调用是否涉及一个fact() 的单个调用堆栈或由于 fact() 本质上是递归的,它将为 fact()< 的每个递归调用涉及一个单独的调用堆栈 接下来是什么?我是递归的新手,对此一无所知。

#include<stdio.h>

int fact(int);

int main(void)
{
int a=8;
printf("The factorial of 8 is %d",fact(a));
}

int fact(int a)
{
if(a==1)
return 1;
return a*fact(a-1);
}

最佳答案

只有一个调用栈(除非我们处理线程)。它从 main 到当前最后一次调用的任何内容。对任何函数的每次调用都会在堆栈上形成一个“堆栈框架”,其中包含函数的参数、返回时返回的返回地址以及函数内的任何局部变量。

如某些答案中所述,在某些情况下,编译器会在优化过程中消除递归。

关于c - 当我们递归调用一个函数时,它涉及一个单独的调用堆栈还是每次调用一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505049/

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