Прямоугольный треугольник, использующий рекурсию в C

#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); 
}