Как я могу получить этот код для печати всех значений последовательности фибоначчи заданных терминов? Прямо сейчас он печатает только последний терминПоследовательность повторов и фибоначчи
ответ
Ваш базовый футляр неверен. Когда n==2
, вы вызовете fibonacci(1)
и fibonacci(0)
. Последний будет продолжаться вниз, пока не закончится пространство стека.
Вы должны проверить для чисел меньше, чем равный базовый случай:
if (n<=2)
EDIT:
Если вы хотите напечатать все значения, вы не можете делать это так, функция в настоящее время структурирована из-за двойной рекурсии.
Если вы отслеживаете номера, которые вы рассчитали ранее, это можно сделать. Затем вы только распечатываете номер (и выполняете рекурсию) при первом подсчете числа, иначе вы посмотрите его из списка и продолжите.
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 около этого диапазона.
+1 Кроме того, вопрос требует «распечатать все значения последовательности фибоначчи заданных терминов». Пожалуйста, улучшите свой ответ, если это возможно. –
Непонятно, почему программа разрешает/сохраняет 'n' до 1000, когда она начинает переполняться до' n', даже достигает 50. – cdlane
Изменить 'if (n == 2)' to 'if (n == 1 || n == 0)'. –
Что вам рассказали о [93 уже существующих вопросах SO относительно рекурсивных реализаций числа фибоначчи в C] (http://stackoverflow.com/search?q=%5Bc%5D+fibonacci+recursion)? – Lundin