2016-07-06 6 views
1

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

+1

Изменить 'if (n == 2)' to 'if (n == 1 || n == 0)'. –

+0

Что вам рассказали о [93 уже существующих вопросах SO относительно рекурсивных реализаций числа фибоначчи в C] (http://stackoverflow.com/search?q=%5Bc%5D+fibonacci+recursion)? – Lundin

ответ

5

Ваш базовый футляр неверен. Когда 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 около этого диапазона.

+0

+1 Кроме того, вопрос требует «распечатать все значения последовательности фибоначчи заданных терминов». Пожалуйста, улучшите свой ответ, если это возможно. –

+0

Непонятно, почему программа разрешает/сохраняет 'n' до 1000, когда она начинает переполняться до' n', даже достигает 50. – cdlane

 Смежные вопросы

  • Нет связанных вопросов^_^