фигурные скобки — рекурсия

Я читал несколько предыдущих вопросов об использовании фигурных скобок, насколько я понимаю, не стоит использовать фигурные скобки, если у вас есть только одна строка, но если вы должны использовать много строк кода, вам нужно будет использовать квадратные скобки.

У меня есть задание, и инструктор требует от нас использовать скобки для каждой ситуации для хорошей привычки. Он также позволяет нам исследовать и использовать пример кода.

Теперь мой вопрос: я нашел пример кода, который не использует скобки. Когда я пытаюсь добавить скобки в код, это делает мой вывод неправильным.
Может кто-нибудь объяснить мне, как правильно использовать фигурные скобки в нескольких строках кода, и предложить рекомендацию о том, как я могу достичь результатов, которые я ищу.

Вот код, когда вывод правильный:

void printStars(int i, int n)
// The calling program invokes this function as follows: printStars(1, n);
// n >= 1
{
if(i == n)
{
for(int j = 1; j <= n; j++) cout << '*'; cout << endl;
for(int j = 1; j <= n; j++) cout << '*'; cout << endl;
}
else
{
for(int j = 1; j <= i; j++) cout << '*'; cout << endl;
printStars(i+1, n); // recursive invocation

for(int j = 1; j <= i; j++) cout << '*'; cout << endl;
}
} // printStars

int main() {
int n;
int i=0;

cout << "Enter the number of lines  in the grid: ";
cin>> n;
cout << endl;

printStars(i,n);

return 0;
}

и когда я пытаюсь «очистить это», выглядя так:

void printStars(int i, int n)
// The calling program invokes this function as follows: printStars(1, n);
{
if(i == n)
{
for(int j = 1; j <= n; j++)
{
cout << '*';
cout << endl;
}
for(int j = 1; j <= n; j++)
{
cout << '*';
cout << endl;
}
}
else
{
for(int j = 1; j <= i; j++)
{
cout << '*';
cout << endl;
}
printStars(i+1, n); // recursive invocation

for(int j = 1; j <= i; j++)
{
cout << '*';
cout << endl;
}
}
} // printStars

int main() {
int n;
int i=0;

cout << "Enter the number of lines  in the grid: ";
cin>> n;
cout << endl;

printStars(i,n);

return 0;
}

0

Решение

Проблема в том, что вы слишком много вкладываете в циклы печати:

    for(int j = 1; j <= i; j++)
{
cout << '*';
cout << endl;
}

Должно быть:

    for(int j = 1; j <= i; j++)
{
cout << '*';
}
cout << endl;

Петли без фигурных скобок могут содержать только не замужем заявление. Это означает, что конец строки печати с использованием cout вызывается только когда заканчивается цикл

Это полный код с использованием фигурных скобок:

void printStars(int i, int n)
// The calling program invokes this function as follows: printStars(1, n);
// n >= 1
{
if(i == n)
{
for(int j = 1; j <= n; j++){
cout << '*';
}
cout << endl;

for(int j = 1; j <= n; j++){
cout << '*';
}
cout << endl;
}
else
{
for(int j = 1; j <= i; j++){
cout << '*';
}
cout << endl;

printStars(i+1, n); // recursive invocation

for(int j = 1; j <= i; j++){
cout << '*';
}
cout << endl;
}
} // printStars

int main() {
int n;
int i=0;

cout << "Enter the number of lines  in the grid: ";
cin>> n;
cout << endl;

printStars(i,n);

return 0;
}
3

Другие решения


По вопросам рекламы [email protected]