C++变态递归调用问题

avecparapluie 2010-03-26 11:43:59
void a(int num)
{
if(num<=0) return;
else cout<<num;
a(--num);
a(--num);
}

int main()
{
int num=5;
a(num);
return 0;
}

求输出(最好能把两个a(--num)递归调用和返回的情况说详细一些).
...全文
240 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦克 2010-03-27
  • 打赏
  • 举报
回复
路过.......哈哈哈

某某9 2010-03-27
  • 打赏
  • 举报
回复
11楼 一看就明白了!
djh512 2010-03-27
  • 打赏
  • 举报
回复
a(--num);a(4) a(3) a(2) a(1)
a(--num);a(3) a(2) a(1) a(0)
第一个a(--num)
输出 5 4 3 2 1 再从第二行从右到左 调用
djh512 2010-03-27
  • 打赏
  • 举报
回复
我也没搞转 单步跟了一下 没看清楚
djh512 2010-03-27
  • 打赏
  • 举报
回复

543211213211Press any key to continue
Who_know_me 2010-03-27
  • 打赏
  • 举报
回复
一个有意思的递归~呵呵
liu8698 2010-03-27
  • 打赏
  • 举报
回复
我也不怎么明白 学习学习
liu8698 2010-03-27
  • 打赏
  • 举报
回复
我也不怎么明白 学习学习
linxingyu404 2010-03-27
  • 打赏
  • 举报
回复
自己运行下最清晰。
如果让我猜下,应该是:5432111121111
小猴饲养员 2010-03-27
  • 打赏
  • 举报
回复
5楼和9楼的说的最明了。你看完9楼给的网址,在看5楼的就明白了。

注意是"--num ”
a(2)
{
a(--num){//代码段里的num=1};
a(--num){//代码段里的num=0};
}
「已注销」 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 avecparapluie 的回复:]
void a(int num)
{
if(num<=0) return;
else cout<<num;
a(--num); 假设这个函数叫a1,由他在递归的子函数分别叫a11,a12,依此类推
a(--num); 假设这个函数叫a2,由他在递归的子函数分别叫a21,a22,依此类推
}

int main()
{
int num=5;
a(num);
return 0;
}

求输出(最好能把两个a(--num)递归调用和返回的情况说详细一些).
[/Quote]

先看上面的红色行
然后如下


首先输出 5 ,然后执行 a1( --5 //即4 )

转到 a1 ( 4 ) 这个函数中执行, 输出4, 然后执行其里面的 a11 ( --4 //即3 )

转到 a11 ( 3 ) 这个函数中执行, 输出3, 然后执行其里面的 a111 ( --3 //即2 )

转到 a111 ( 2) 这个函数中执行, 输出2, 然后执行其里面的 a1111 ( --2 //即1 )

转到 a1111 ( 1 ) 这个函数中执行, 输出1, 然后执行其里面的 a11111 ( --1 //即0 )

转到 a11111 ( 0 ) 这个函数中执行, 根据 if 语句, 直接返回到 a1111 ( 1 )中

在 a1111 ( 1 ) 中继续往下执行, 即执行 a11112 ( -1 ), 根据 if 语句, 直接返回到 a1111 ( 1 )中 ,然后返回到 a111 ( 2) 中

在 a111 ( 2) 中继续往下执行, 即执行 a1112 ( 0 ) , 根据 if 语句, 直接返回到 a1111 ( 2 )中 ,然后返回到 a111 ( 3 ) 中

......
......

依次类推
全部写完太烦琐了
楼主最好自己话个图,就都清楚了
wwwwfly 2010-03-27
  • 打赏
  • 举报
回复

a1 1
a2 2
a3 3 a0
a4 4 a1
a5 5 a2
a3

5-4-3-1-1-1-2-1-3-2-1-1
smallmaster 2010-03-27
  • 打赏
  • 举报
回复
不算变态吧。画画图就行了
linxingyu404 2010-03-27
  • 打赏
  • 举报
回复
我觉得这个应该是个二叉树
5
4 3
3 2 2 1
2 1 1 1
1
按这个二叉树前序遍历。
avecparapluie 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wwwwfly 的回复:]
a1 1
a2 2
a3 3 a0
a4 4 a1
a5 5 a2
a3

5-4-3-1-1-1-2-1-3-2-1-1
[/Quote]
不对哦,是5-4-3-2-1-1-2-1-3-2-1-1
返回到第最后一层时(就是最后4个数字)怎么得到的是3211,而不是321?
camelisi 2010-03-27
  • 打赏
  • 举报
回复
看看我的这个文章就晓得了
http://topic.csdn.net/u/20100204/01/a4ebae76-2e24-4ddf-8466-7cff3fd27f9a.html
走好每一步 2010-03-27
  • 打赏
  • 举报
回复
你在纸上比划给你同学听,同学听懂了,你就明白了,
a(5)5,太大了,弄不来, 3就可以说明问题了。
走好每一步 2010-03-27
  • 打赏
  • 举报
回复
a(3)
{
print(3);
a(2)
{
print(2)
a(1)
{
print(1)
a(0) 进去返回
a(-1) 进去返回
}
a(0) 进去返回
}
a(1) // 要等a(2)递归调用完了才顺序执行它
{
print(1)
a(0) 进去返回
a(-1) 进去返回
}
}
走好每一步 2010-03-27
  • 打赏
  • 举报
回复
a(3)
{
print(3);
a(2)
{
print(2)
a(1)
{
print(1)
a(0) 进去返回
a(-1) 进去返回
}
a(0) 进去返回
}
a(1) // 要等a(2)递归调用完了才顺序执行它
{
print(1)
a(0) 进去返回
a(-1) 进去返回
}
}
avecparapluie 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ylecxm 的回复:]
引用楼主 avecparapluie 的回复:
void a(int num)
{
if(num<=0) return;
else cout<<num;
a(--num); 假设这个函数叫a1,由他在递归的子函数分别叫a11,a12,依此类推
a(--num); 假设这个函数叫a2,由他在递归的子函数分别叫a21,a22,依此类推
}

int main()
{
int nu……
[/Quote]
按照你的思路,我得出结果是54321121321,
而实际结果是543211213211,不知道最后怎么少了一个1
加载更多回复(1)

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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