递归占用的栈帧大小(待验证)

int fact(int n) {   //求n的阶乘

if(n < 0) 

  return 0

else if (n == 0)

  return 1;

else if (n == 1)

  return 1;

else

  return n*fact(n-1);

}

一般而言,在 X86 32位系统中,一次函数调用消耗的栈空间大约是:
4字节返回地址;
4*n字节的参数,n是参数个数;
12字节的寄存器保护区(EBP ESI EDI)
4*m字节局部变量,m 是声明在函数内部变量的个数
所以,对于楼主给出的实例,一次调用耗用的内存大小是
4+4*1+12=20字节
若递归 1000 次,大约耗 20KB 栈空间
若递归 10000 次,大约耗 200KB 栈空间

原文地址:https://www.cnblogs.com/xxiaoye/p/3625007.html