高手过来看一下,关于递归和函数压栈

leialen 2004-02-05 12:41:17
#include <stdio.h>


int recursion(int num);

void main()
{
int num = 4;
recursion(num);
getchar();
}

int recursion(int num)
{
printf("num = %d\n",num);
if (num == 1)
{
return num;
}
else
{
return num *= recursion(num--);
}
}

问题:
这句recursion(num--)有问题,
在第-次递归调用的时候,函数压栈时,参数值为4,正常
在第二次递归调用的时候,函数压栈时,参数值为3,错?
为什么?我理解应该是4,自减操作应该在函数退栈后做阿。
在第三次到栈空间满递归调用的时候,函数压栈时,参数值为3
如果我上面的理解不对的话,那这里为什么不先递减,而是一直是3?

请大家帮忙,最好不要从哪里搞个source贴在这里,希望有人能给一个细致的解释,
谢谢了
...全文
58 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧