учим рекурсию в универе) Существует монотонная последовательность 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 шт):
#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
Другое решение, с решением квадратного уравнения для поиска индекса треугольного числа))
#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