Online Compiler C

#include <stdio.h> void print_times(int m, int times) { if (times == 0) { return; } printf("%d ", m); print_times(m, times - 1); } void print_sequence(int n) { int current = 1; if (n <= 0) { return; } if (n >= current) { print_times(current, current); print_sequence(n - current); current++; } else { print_times(current, n); } } int main() { int x; scanf("%d", &x); print_sequence(x); return 0; }
This code attempts to print a sequence of numbers where each number appears as many times as its value, but it has a logic error. The function `print_sequence` is supposed to print numbers from 1 upward, each repeated that many times, until the total count reaches `n`. However, the variable `current` is reset to 1 on every recursive call, so the intended increment never happens.

- The variable `current` is declared inside `print_sequence` and set to 1 each time the function is called. This means the recursion always tries to print the number 1 again, instead of moving to the next number.
- The condition `if (n >= current)` will always be true when `current` is 1 and `n` is positive, so the `else` branch is never reached. The recursion subtracts `current` (which is always 1) from `n`, so it only prints the number 1 repeatedly.