C#递归堆栈分配

时间:2011-04-11 17:52:26

标签: c#

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);




}

我的问题是每次调用,代码生成如上面提到的堆栈 }

}

2 个答案:

答案 0 :(得分:3)

不,它不生成代码,它为每次调用使用相同的代码。

请在此处阅读以获取更多信息:http://en.wikipedia.org/wiki/Call_stack

所以基本上有stack pointer指向stack中的最高点,并且对于每个函数,该指针增加了局部变量和一些系统信息分配所需的字节数。并且在函数调用完成后它会减少。

答案 1 :(得分:0)

生成的代码是原始示例中的代码,没有别的。传递给它的实际类似于您推出的代码,是的。代码与其运行的数据之间存在区别。您的堆栈将包含您的调用和本地变量,但执行的代码不会更改。