Не получается контролировать глубину итерации
Последовательность из задачи является последовательностью чисел фибоначчи, т.е k - сумма двух предыдущих членов.
Таблица должна выглядеть примерно так:
В выводе вы увидете, как я попытался сделать такой вывод, пока без форматирования.
Главная проблема заключается в том, что программа неправильно определяет глубины рекурсии(левый столбец). Сравните как примерно должна выглядеть таблица с выводом.
Код:
int i = 0;
long fibo(int n, int m) {
if (n == 1 || n == 2) {
return 1;
} else {
return fibo(n - 1, m + 1) + fibo(n - 2, m + 1);
}
}
long table(long n, int m) {
if (i == 0) {
printf("--------------------------------------------------------------------------------------------------\n");
printf("| Level | Recursion descent | Recursion return |\n");
printf("--------------------------------------------------------------------------------------------------\n");
printf("| %d | Input: n = %2ld fibo(%2ld ) | Result:%2ld |\n", i, n, n, fibo(n, m));
return 0;
}
else if (n == 1 || n == 2){
printf("| %d | const = 1 | return 1 (fibo = 1) |\n", i, n);
return 0;
}
else if (i == m){
printf("| %d | n = %d fibo(%ld) and fibo(%ld) | return %ld+%ld (fibo = %ld) |\n", i, n, n - 1, n - 2, fibo(n - 1, m + 1), fibo(n - 2, m + 1), fibo(n - 2, m + 1), fibo(n, m + 1));
}
table(n - 1, m + 1);
table(n - 2, m + 1);
return 0;
}
int main() {
long n; scanf("%ld", &n);
if (n > 47) {
printf("!\n");
return 0;
}
for ( ; i < n; i++){
table(n, 1);
printf("--------------------------------------------------------------------------------------------------\n");
}
printf("%ld", fibo(n, 1));
}
