理解c++中递归打印123456789987654321的代码
understanding code to print 123456789987654321 by recursion in c++
好了,我正在读《跳到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 );
}
printNum(9)
打印什么?希望你能看到它输出99
,因为if
是假的。
那么printNum(8)
打印什么?在这种情况下,printNum
做了三件事。首先,它输出8
,这是cout << num ;
部分。然后它输出99
(因为如果num
为8,printNum(num + 1)
就会这样做,参见第一段)。然后它输出8
,因为这是下一行代码。因此printNum(8)
将输出8998
。
那么printNum(7)
打印什么呢?首先是7
,然后调用printNum(8)
,输出8998
(见第二段)。然后输出7
。因此,printNum(7)
将输出789987
。
每次调用printNum
时,打印最后一个cout << num
。printNum
被递归调用9次。这就是为什么你的第二个评论this should print only 9...
不完全准确。它将为printNum(9)
打印9
,是的,但它也将随后为printNum(8)
打印8
,等等…
在printNum
结束后,程序控制返回到先前对printNum
的调用。因此,例如,在printNum(9)
结束后,它返回到printNum(8)
以打印最后的第二个8
。
相关文章:
- 没有找到相关文章