Рекурсия и последовательность фибоначчи

Как получить этот код для печати всех значений последовательности фибоначчи данных терминов? Сейчас он печатает только последний термин

#include  int fibonacci(int n){ if (n==2) return 1; else return fibonacci(n-1) + fibonacci(n-2); } int main() { int n; int answer; printf("Enter the number of terms you'd like in the sequence\n"); scanf("%d",&n); answer = fibonacci(n); printf("The answer is %d\n", answer); } 

Недопустимый базовый регистр. Когда n==2 , вы fibonacci(1) и fibonacci(0) . Последний будет продолжаться вниз, пока не закончится пространство стека.

Вы должны проверить номера меньше, чем на базовый случай:

 if (n<=2) 

РЕДАКТИРОВАТЬ:

Если вы хотите напечатать все значения, вы не сможете сделать это так, как функция в настоящее время структурирована из-за двойной рекурсии.

Если вы будете отслеживать цифры, которые вы рассчитали ранее, это можно сделать. Затем вы только распечатываете номер (и выполняете рекурсию) при первом подсчете числа, иначе вы посмотрите его из списка и продолжите.

 int fibonacci(int n){ static int seq[50] = {0}; if (n > 50) { printf("number too large\n"); return 0; } if (seq[n-1] == 0) { if (n<=2) { seq[n-1] = 1; } else { seq[n-1] = fibonacci(n-1) + fibonacci(n-2); } printf("%d ", seq[n-1]); } return seq[n-1]; } 

Выход:

 Enter the number of terms you'd like in the sequence 10 1 1 2 3 5 8 13 21 34 55 The answer is 55 

Обратите внимание, что указанная выше функция имеет предел 50, так как результат слишком велик для 32-битного int в этом диапазоне.