理解代码在c ++中通过递归打印123456789987654321

时间:2015-07-12 07:24:27

标签: c++ recursion

好的,我正在读书跳到c ++,并且我已成功进入第16章,这是关于递归的。我阅读了这一章并观看了很少的YouTube视频,所以我想我知道它们是如何工作的。但当我试图理解书中给出的这个代码时,我失败了。 根据我的理解,此代码应打印1234567899 。我评论了我无法理解的行/部分。 在解释时请非常具有描述性,因为我想彻底清除我的怀疑。

#include <iostream>

using namespace std;

void printNum (int num)
{

    cout << num ;

    if ( num < 9 )
    {
        printNum( num + 1 ); //if statement should continue untill 123456789 prints on screen
    }
    cout << num; // this should print only 9 and after that program should exit.
}
int main ()
{
    printNum( 1 );
}

3 个答案:

答案 0 :(得分:3)

printNum(9)打印什么?希望您可以看到它输出99,因为if为假。

那么printNum(8)会打印什么?好吧,printNum在这种情况下做了三件事。首先,它输出8,即cout << num ;部分。然后它会输出99(因为如果printNum(num + 1)为8,那就是num将会执行的操作,请参阅第一段)。然后它输出8,因为这是下一行代码。因此printNum(8)将输出8998

那么printNum(7)会打印什么?首先7,然后调用输出printNum(8)的{​​{1}}(参见第二段)。然后输出8998。因此7将输出printNum(7)

继续此分析。

答案 1 :(得分:1)

为{em>每次调用cout << num打印最后一个printNum。递归调用printNum 9次。这就是为什么你的第二条评论this should print only 9...并不完全准确。它会为9打印printNum(9),是的,但之后还会8打印printNum(8)等等。

printNum结束后,程序控件将返回到printNum之前的调用。因此,例如,在printNum(9)完成后,它会返回printNum(8)以在结尾处打印第二个8

答案 2 :(得分:0)

你不理解递归,伙计。首先在树状结构中逐步绘制算法,然后你会很好理解。

在第一个函数调用num = 1第一个cout完成并且新调用进入堆栈而第二个cout没有执行,现在num = 2并且再次执行第一个cout并且第二个cout保持在堆栈中等等