gpt4 book ai didi

c++ - 为什么添加相同的东西会翻转递归

转载 作者:行者123 更新时间:2023-11-30 01:48:33 25 4
gpt4 key购买 nike

我真的不明白。

我怎么会这样

void printStars(int lines,int lines_org){
int i;

if (lines>0){
for(i=0;i<lines-1;i++)
cout<<" ";
for(i=lines-1;i<lines_org;i++)
cout<<" *";
cout << endl;

printStars(lines-1,lines_org);

}
}

它打印出这个//看来我不能发布图片

   *  * * * * ** * * * 

but if I just add that first part back onto the end it flips it

void printStars(int lines,int lines_org){
int i;

if (lines>0){
for(i=0;i<lines-1;i++)
cout<<" ";
for(i=lines-1;i<lines_org;i++)
cout<<" *";
cout << endl;

printStars(lines-1,lines_org);

for(i=0;i<lines-1;i++)
cout<<" ";
for(i=lines-1;i<lines_org;i++)
cout<<" *";
cout << endl;

}
}

我最终得到这个?!//看来我不能发布图片

   *

  * *

 * * *

* * * *

* * * *

 * * *

  * *

   *

为什么会翻转?

我不懂递归

最佳答案

让我们将您的函数分成 3 个部分:

 void printStars(int lines,int lines_org){
int i;

if (lines>0){
// P1: Print the stars.
for(i=0;i<lines-1;i++)
cout<<" ";
for(i=lines-1;i<lines_org;i++)
cout<<" *";
cout << endl;

// P2: Recurse.
printStars(lines-1,lines_org);

// P3: Print the stars, again.
for(i=0;i<lines-1;i++)
cout<<" ";
for(i=lines-1;i<lines_org;i++)
cout<<" *";
cout << endl;
}
}

您的函数将像这样递归:

 P1
|->P1
| |->P1
P2--+->P2 -+->P2
| |->P3
|->P3
P3

P1P3 是相同的,所以它们必须产生相同的输出,对吗?因此,它打印星星,递归然后再次打印同一组星星。所以,无论你在第一行得到什么,你都会在最后一行得到。无论你在第二行得到什么,你都会在最后一行之前得到......

让我换一种方式解释。尝试逐步打开你的递归函数:

第一步:1_star(递归)1_star

第二步:1_star (2_stars (recurse) 2_stars) 1_star

第 3 步:1_star (2_stars (3_stars (recurse) 3_stars) 2_stars) 1_star

第 4 步:...

关于c++ - 为什么添加相同的东西会翻转递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com