учим рекурсию в универе) Существует монотонная последовательность 1 2 2 3 3 3...и так далее

нужно по заданному пользователем N вывести N членов этой последовательности.

на данный момент реализована сумма такой последовательности. но увы, не знаю, как вывести элементы должным образом.

сперва была идея в сумму записывать каждый раз +1, потом делать вложенный цикл, который бы мог по числу определить, сколько раз надо вводить данный элемент (то есть, например, есть 2, соответственно, мне требуется 2 раза ввести данное число в строку) и выводить его. также такому подходу нужно ограничение, чтобы не выйти за допустимое число, введенное пользователем.

не могу сложить в голове последовательность реализации, хочется все-таки разобраться

#include <stdio.h>
#include <stdlib.h>
int reccur(int d)
{
int sum = 0;
int j = 0;
if (d == 1)
    return (1);
else
    for (int i = 1; sum < d; i++)
    {
        sum += i;
        j = i;
    }
return (reccur(--d) + j);

 }

void main() 
{
int n;
printf("enter the number ");
scanf_s("%d", &n);
printf("\n%d",reccur(n));
puts("\nrecursion has been done\n");
}

Ответы (2 шт):

Автор решения: vp_arth
#include<stdio.h>

void reccur_c(int max_num, int num) {
    int already_printed = (num-1)*num / 2;
    for (int i = 0; i < num && already_printed + i < max_num; i++){
        printf("%d ", num);
    }

    if (already_printed + num < max_num){
        reccur_c(max_num, num + 1);
    }
}
void reccur(int n) {
    reccur_c(n, 1);
}
int main(int argc, char *argv[])
{
    reccur(11);
}
1 2 2 3 3 3 4 4 4 4 5
→ Ссылка
Автор решения: vp_arth

Другое решение, с решением квадратного уравнения для поиска индекса треугольного числа))

#include <stdio.h>
#include <math.h>

void solution(int n) {
    if (n == 0) return;
    solution(n - 1);
    int i = ceil((1+sqrt(1+8*n))/2) - 1; // Ищем индекс треугольного числа
    printf("%d ", i);
}
int main(int argc, char *argv[])
{
    solution(57);
    printf("\n");
}
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 11 11
→ Ссылка