2016-02-15 2 views
-1

Мне нужно написать код, который отображает последовательность Фибоначчи, к желаемому пользователю термину и также должен использовать цикл while. Я не уверен, почему этот код не работает.Последовательность Фибоначчи во время цикла

#include <stdio.h> 
#include <stdlib.h> 
int main (void) { 
    int max; 
    printf("Enter the max term of the Fibonacci Sequence:\n"); 
    scanf("%i", &max); 
    int a=0; 
    int b=0; 
    a=2; 

    while(a<max) { 
     if((a==0||a==1)) 
     { 
      printf("%i\n", &a); 
      ++a; 
     } 
     else if(a>1) 
     { 
      a=(a-1)+(a-2); 
      printf("%i\n", &a); 
      ++a; 
     } 
    } 
    return 0; 
} 
+3

Ваша логика кажется неправильной. – Haris

+2

В ваших операторах 'printf' вы передаете указатель, а не' int'. Избавьтесь от '&' операторов, например. 'printf ("% i \ n ", a);' –

+1

Для выполнения этой работы вам нужно использовать 'a' и' b'. Вы не можете просто удвоить 'a' и вычесть 2, чтобы получить следующий номер. –

ответ

0

В самом начале программы (до цикла while) a 2 (см линии a=2).

И в цикле while вы следующее:

a=(a-1)+(a-2); // a = 2-1+2-2 i.e. a = 1 

и сразу после

++a; // a == 2 

Итак, после того, как он a==2 снова. Этот цикл никогда не заканчивается.

Но это техническая проблема. Более важно то, что вы пытаетесь вычислить не последовательность Фибоначчи. В последовательности Фибоначчи каждый последующий номер представляет собой сумму двух предыдущих. Но в вашем коде есть добавление не двух предыдущих чисел последовательности Фибоначчи, а предыдущих двух натуральных чисел.

У вас есть переменная b, потому что кто-то сказал вам добавить ее. И это было правильно! Просто запомните предыдущий найденный элемент последовательности Фибоначчи в b. Когда вы знаете предыдущий один элемент и текущий, можно рассчитать следующий.

0

Вы можете попробовать это.

#include <stdio.h> 
#include <stdlib.h> 
int main (void) { 
    int max; 
    printf("Enter the max term of the Fibonacci Sequence:\n"); 
    scanf("%i", &max); 
    int n=0; 
    int a=0; 
    int b=1; 
    int next; 

    while(n<max) { 
     if (n <= 1) 
     { 
      next = n; 
      n++; 
     } 
     else 
     { 
     next = a + b; 
     a = b; 
     b = next; 
     n++; 
     } 
    printf("%d\n",next); 
} 
return 0; 

}

проблемы с вашим кодом:

  1. вы Инициирование а = 2 => она не будет принимать первый, если цикл - '0' не будет напечатано в вашем результат.
  2. a = (a-1) + (a-2); i.e a = 1 , тогда вы делаете ++ a; => a == 2. Таким образом, это опять-таки цикл с тем же a == 2.

следовательно, он напечатает то же значение, и цикл будет выполняться бесконечно.