【发布时间】:2020-10-03 13:04:06
【问题描述】:
#include<stdio.h>
void printPattern(int n);
int main() {
int n =4;
printPattern(n);
return 0;
}
void printPattern(int n){
if (n=1){
printf("*\n");
return;
}
printPattern(n-1);
for(int i=0;i< (2*n-1);i++){
printf("*");
}
printf("\n");
}
这里,n 的值为 4,因此在 void 函数中 if 语句不应该工作,因为 n 不等于 1 并且它不会打印 *,但如果你运行代码,它将打印 * 和我不知道为什么。 n 值为 4,因此它应该跳过 if 语句,然后 n 值将变为 3,因为 printPattern(n-1) 然后它将在第 1-2-3 行打印 1-3-5 个星
*
***
*****
但如果您运行代码,它将在第 1-2-3-4 行打印 1-3-5-7 颗星
*
***
*****
*******
循环发生在递归之后,因此它应该在此代码中打印 3 行(1-3-5 星)而不是 4 行(1-3-5-7 星),如果不使用 else 语句。
我正在学习使用 Youtube 的递归按递增顺序打印每行的奇数颗星,谁能给我解释一下。
【问题讨论】:
-
if (n=1) 应改为 if (n==1)。考虑使用 IDE 来测试和调试您的代码。
-
投票结束为错字。
-
哦,没注意到这个错误,谢谢指正