Как правильно сделать так, чтобы этот цикл отображал первые 40 цифр последовательности Фибоначчи? - PullRequest
0 голосов
/ 27 марта 2011

Насколько я могу судить, похоже, что это должно работать.

Первые два элемента установлены в 1 (я игнорирую первые 0).Предполагается, что цикл for проходит по массиву, и поскольку числа Фибоначчи равны сумме двух предыдущих чисел, я хочу добавить их, а затем отобразить их.Я не совсем уверен, почему.

Примечание: я не ищу ответ напрямую, а могу сам разобраться в этом.

//Fibonacci sequence
#include <stdio.h>

int main(void) {
        int fib_numbers[40] = {1, 1}, i;


        for(i = 1; i < 40; i++) {
                fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
                printf("\t%d\n", fib_numbers[i]);
            }

        return 0;
}

Ответы [ 5 ]

2 голосов
/ 27 марта 2011

После первого шага элемент erray равен 0 (не инициализирован, но 0 в этом случае)Как насчет fib [i + 1] = fib [i] + fib [i-1];printf ("% d \ n", fib [i + 1])?И, конечно, fib должен иметь размер 41 вместо 40.

2 голосов
/ 27 марта 2011

Проверьте левую часть этой строки кода

fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];

и подумайте, где в массиве вы храните значение.

2 голосов
/ 27 марта 2011
fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];

Вы используете только i и i-1, формула Фибоначчи включает в себя три последовательных индекса.

Кстати, это:

int fib_numbers[40] = {1, 1}, i;

- это ужасно ИМО.Пожалуйста, разбейте это на две строки.

int fib_numbers[40] = {1, 1};
int i;
0 голосов
/ 27 марта 2011

Полагаю, ваш цикл неправильный

  for(i = 1; i < 40; i++) {
       fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
       printf("\t%d\n", fib_numbers[i]);
  }

Вы присваиваете i-й элемент, переопределяя себя. Значение i-го элемента равно нулю, когда i больше 1.

Может быть, вы должны сделать это так

//Fibonacci sequence
#include <stdio.h>

int main(void) {
    int fib_numbers[40] = {1, 1};

    for(int i = 2; i < 40; i++) {
        fib_numbers[i] = fib_numbers[i - 1] + fib_numbers[i - 2];
        printf("\t%d\n", fib_numbers[i]);
    }

    return 0;
}

Но я рекомендую использовать рекурсию, чтобы найти фибоначчи.

//Fibonacci sequence
#include <stdio.h>

int main void() {

   int fib_numbers[40] = {1, 1};

   for(int i = 2 ; i < 40 ; i++) {
        fib_numbers[i] = fibonacci(i);
        printf("\t%d\n", fib_numbers[i]);
   }
   return 0;
}

int fibonacci(int a) {
     if (a <= 1) return 1;
     return fibonacci( a - 1 ) + fibonacci( a - 2 );
}
0 голосов
/ 27 марта 2011

Обновить код следующим образом:

for(i = 2; i < 40; i++) {
                fib_numbers[i] = fib_numbers[i-1] + fib_numbers[i - 2];
                printf("\t%d\n", fib_numbers[i]);
            }
...