递归进栈出栈顺序示意: 请高手指点?

wgj200123 2011-12-17 02:54:46

void merage_sort(int array[], int p, int r)
{
if(p==r)
return;
else
{
int q=(p+r)/2;
merage_sort(array, p, q); //编号 n1
merage_sort(array, q+1, r); //编号 n2
merage(array, p, q, r); //编号 n3
}
}



问题: 在else子句中,当执行到编号n1的语句时候,是一直递归调用到返回,再执行编号n2的语句继续递归,最后执行编号n3, 还是按照 n1、n2、n3 顺序的递归,可以画一个堆栈的结构,把具体进栈的情况展示出来吗? (假如开始: p=0, q=10)。

再次感谢各位大虾帮忙解决,困扰我很久的问题。 拜谢!!!!
...全文
279 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgj200123 2011-12-20
  • 打赏
  • 举报
回复
CSDN已无高手,结贴了!
wgj200123 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yisikaipu 的回复:]

这个要请qscool1987 :)
[/Quote]

如何请到该高手?
wgj200123 2011-12-18
  • 打赏
  • 举报
回复
顶起,楼上的朋友说了一些理论性的东西,不过还是希望能用直观的栈结构图来描述!
wgj200123 2011-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tstorm 的回复:]

你编号的n1,n2,n3都是在同一桢栈上面
也就是说,执行完了n1,n1的栈已经释放了以后,才会申请n2的栈空间
[/Quote]

对我很有帮助!
yisikaipu 2011-12-18
  • 打赏
  • 举报
回复
这个要请qscool1987 :)
tstorm 2011-12-17
  • 打赏
  • 举报
回复
你编号的n1,n2,n3都是在同一桢栈上面
也就是说,执行完了n1,n1的栈已经释放了以后,才会申请n2的栈空间
yisikaipu 2011-12-17
  • 打赏
  • 举报
回复
用最简单的例子示例

int fact(int n)
{
cout <<n <<" in" <<endl;
if(n<=1)
{
cout <<"1 return" <<endl;
cout <<"1!=1" <<endl;
return 1;
}

int ret=n*fact(n-1);
cout <<n <<" return" <<endl;
cout <<n <<"!=" <<ret <<endl;
return ret;
}

int main()
{
int n=4;
cout <<n <<"!=" <<fact(n) <<endl;

return 0;
}


4 in
3 in
2 in
1 in
1 return
1!=1
2 return
2!=2
3 return
3!=6
4 return
4!=24
4!=24
请按任意键继续. . .
lelewei 2011-12-17
  • 打赏
  • 举报
回复
这个调用栈的结构图可能有点长。归并排序就是把数组分成两部分进行排序,每一个部分排好之后进行合并,得到排序后的数组。n1语句(先不管他是不是递归)就是一个函数调用,这个函数调用返回之后,才能执行下面的语句。

64,648

社区成员

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

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