对一个递归调用的例子不理解,请大家帮忙.

nnh 2006-08-07 10:05:50
// recur.cpp -- use recursion
#include <iostream>
void countdown(int n);

int main()
{
countdown(4); // call the recursive function
system("pause");
return 0;
}

void countdown(int n)
{
using namespace std;
cout << "Counting down ... " << n << endl;
if (n > 0)
countdown(n-1); // function calls itself
cout << n << ": Kaboom!\n";
}


我对于代码最后也输出:
1: Kaboom!
2: Kaboom!
3: Kaboom!
4: Kaboom!

不是很理解,请大家帮忙解释一下,谢谢



...全文
214 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_nNightmire 2006-08-07
  • 打赏
  • 举报
回复
可以根据流程,分析每次调用countdown(int n)时的n值和输出值,有助于更好的理解递归

using namespace std;
cout << "Counting down ... " << n << endl;
if (n > 0)
countdown(n-1); // function calls itself
//在这里,一直调用到最后n<0时才返回
//所以是最后才输出最先的n值4
cout << n << ": Kaboom!\n";
jigangwang 2006-08-07
  • 打赏
  • 举报
回复
lz把数字带进去
自己在纸上走一边程序,递归就出来了.
lj860603 2006-08-07
  • 打赏
  • 举报
回复
当n不为零时,看程序,cout << n << ": Kaboom!\n"; 都没有机会运行呀?
========================
是啊,就是不段把变量作为参数进栈。

这么说当运行一次countdown时, cout << n << ": Kaboom!\n";也会一起运行的吗?
=========================
会,原来进栈的变量都还在,所以一起打印出来
m_nNightmire 2006-08-07
  • 打赏
  • 举报
回复
每次运行都会输出n: Kaboom!
自己调用自己跟调用别的函数没什么区别,只是难于理解而已
nnh 2006-08-07
  • 打赏
  • 举报
回复
当n不为零时,看程序,cout << n << ": Kaboom!\n"; 都没有机会运行呀?

这么说当运行一次countdown时, cout << n << ": Kaboom!\n";也会一起运行的吗?
云梦谭 2006-08-07
  • 打赏
  • 举报
回复
我觉得对于这个问题,你单步执行代码,跟踪一下代码的执行顺序,注意一下执行过程中参数的变化,会理解得更深刻一点
chouyankl 2006-08-07
  • 打赏
  • 举报
回复
四扇门,进来的时候是4,3,2,1,出去的时候当然就是1,2,3,4了.
lj860603 2006-08-07
  • 打赏
  • 举报
回复
变量进栈,4第一次进栈,然后是3、2、1,这样逐个进。4在最下面,而1在最上面,所以打印出来的时候是按1、2、3、4这样的顺序打印的。
lj860603 2006-08-07
  • 打赏
  • 举报
回复
递归,就是自己调用自己,以前调用的变量在栈上是不会消失的。
在你这个程序里,直到n=0,就不会再调用自己了。
现在是要打印,就是把以前在栈上的变量(n)逐个打印出来。
netxuning 2006-08-07
  • 打赏
  • 举报
回复
mark

64,677

社区成员

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

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