void factorial(int n)
{
if(n ==0)
return 1;
int value = n*factorial(n-1);
printf("the value is %d", value)
}
假设输入函数为4。
所以拨打的电话号码为5。
我想知道每次调用函数时,堆栈分配是如何发生的。是否有类似下面发生的事情
void factorial(4)
{
if(4 == 0)
return 1;
int value = 4*factorial(3)
printf ("the value is %d",value);
}
void factorial(3)
{
if(3 ==0)
return 1;
int value = 3* factorial (2);
}
我的问题是每次调用,代码生成如上面提到的堆栈 }
}
答案 0 :(得分:3)
不,它不生成代码,它为每次调用使用相同的代码。
请在此处阅读以获取更多信息:http://en.wikipedia.org/wiki/Call_stack
所以基本上有stack pointer
指向stack
中的最高点,并且对于每个函数,该指针增加了局部变量和一些系统信息分配所需的字节数。并且在函数调用完成后它会减少。
答案 1 :(得分:0)
生成的代码是原始示例中的代码,没有别的。传递给它的实际值类似于您推出的代码,是的。代码与其运行的数据之间存在区别。您的堆栈将包含您的调用和本地变量,但执行的代码不会更改。