#c #recursion #char
#c #рекурсия #символ
Вопрос:
Мне нужна помощь с программой. Я должен написать рекурсивную функцию для печати прямоугольного треугольника, такого как этот (для n
== 4):
*
* *
* * *
* * * *
n
— длина основания. Я не могу использовать циклы, глобальные переменные или static
ключевое слово.
Пока у меня есть программа, печатающая n
:
#include <stdlib.h>
void triangle(int n);
int main() {
int n;
printf("Write n: ");
scanf("%d", amp;n);
triangle(n);
return 0;
}
void triangle(int n) {
if (n != 0) {
triangle(n - 1);
printf("%d", n);
printf("n");
}
}
Итак, как я могу напечатать такой треугольник, и будет ли моя программа полезной для выполнения этой задачи?
Комментарии:
1. Перейдите по этой ссылке:geeksforgeeks.org /…
2. Термин на английском языке — » прямоугольный треугольник», а не «прямоугольный треугольник». Отредактировано.
3. Похоже, у вас хорошее начало. Я так понимаю, что проблема, с которой вы боретесь, заключается в том, как печатать
n
звездочки в строке без зацикливания? Я могу придумать как минимум две альтернативы. Существует ли верхняя граница значенийn
, которые должна обрабатывать ваша программа?4. нет ограничений для n, я думаю, что программе просто нужно работать для случайного значения n
Ответ №1:
Если вы хотите использовать рекурсию, ваш код должен быть таким:
#include <stdio.h>
// function to print a row
void printn(int num);
// function to print the pattern
void pattern(int n, int i);
// driver function
int main()
{
int n;
if(scanf("%d", amp;n) != 1)
{
printf("Invalid number");
return 1;
}
pattern(n, 1);
return 0;
}
void pattern(int n, int i)
{
// base case
if (n == 0)
return;
printn(i);
printf("n");
// recursively calling pattern()
pattern(n - 1, i 1);
}
void printn(int num)
{
// base case
if (num == 0)
return;
printf("* ");
// recursively calling printn()
printn(num - 1);
}