C语言函数递归求助!!!

lyaywy1987 2011-03-17 01:01:55
void e(int );
main()
{
int a; a=3; e(a);
}
void e(int n)
{
if(n>0)
{
e(--n);
printf("%d" , n);
e(--n);
}
}
这段程序的输出是:
A. 0 1 2 0
B. 0 1 2 1
C. 1 2 0 1
D. 0 2 1 1
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一曲肝肠断 2011-03-17
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门

哥,顶你!
赵4老师 2011-03-17
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!
lx3275852 2011-03-17
  • 打赏
  • 举报
回复
B. 0 1 2 1

简单的比较浅的递归,你手动替换代码就可以,复杂的就得分析规律了。。。
给你替换一下:


main()
{
 int a; a=3; e(a);
}
a=3,
所以上边代码e(a); 这一句代码其实就是e(3);替换函数为
{
 e(2);
 printf("%d" , 2);
 e(1);
}
再把e(2),e(1)替换成上边的代码 ,替换结果是


{
 {
  e(1);
  printf("%d" , 1);
  e(0);
 }
 printf("%d" , 2);
 {
  e(0);
  printf("%d" , 0);
  e(-1);
 }
}

你能看出来e(0),e(-1) 是直接return 的,所以,上边代码替换结果是
main()
{
 int a;
 a = 3;
 {
  {
   {
    printf("%d" , 0);
   }
   printf("%d" , 1);
  }
  printf("%d" , 2);
  {
   printf("%d" , 0);
  }
 }
}

替换结束后,你猜猜输出结果是多少???
bdmh 2011-03-17
  • 打赏
  • 举报
回复
A,--n直接减到n=0,然后开始打印之前被压栈的代码,n=2被压入,然后n=1被压入,开始出栈,反向输出

69,373

社区成员

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

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