2016-03-03 4 views
-5

Это код, который я написал для отображения последовательности Фибоначчи. Может кто-нибудь сказать мне, почему это неправильно, и как я могу это исправить? Я чувствую, что моя логика правильная, но способ исполнения - нет. Есть ли способ изменить одну и ту же программу, чтобы она работала?Последовательность Fibonacci в C++ (не работает)

#include<iostream> 
using namespace std; 
int main() 
{ 
    int a = 0, b = 1, prev1, prev2,i = 0; 

    while (i <= 100) 
    { 
     prev1 = b+a;        
     prev2 = b; 
     a = prev1 - prev2; 
     prev1 = prev1 + prev2;                 

     cout << "prev1 = \n"<<prev1<<"\n"; 

     i++; 
     /* 
     Logic I Used. 
     a = 0 
     prev2=    b = 1 
     prev1=    a+b= 1 
     prev1 + prev2 = (a+b)+(b)= 2 
     */ 
    } 
    return 0; 
} 
+7

Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

С небольшим количеством дополнительного вывода вы можете быть в состоянии обнаружить ошибку. См. Http://ideone.com/FhTz0I. –

+0

Ваша логика * * * правильно. Вы получаете 2 для 'prev1 + prev2'. Но тогда вы ничего не меняете ... последовательности Fibboncai полагаются на число, увеличивающее право? – Samidamaru

ответ

1

В последовательности Фибоначчи,

S(N+2) = S(N) + S(N+1) 

Вы должны постоянно обновлять S(N) и S(N+1) при вычислении числа в цикле. У вас есть дополнительные переменные, которые вас путают. Основная логика проста.

next = prev1 + prev2 
prev1 = prev2; 
prev2 = next; 

Пока вы инициализации prev1 и prev2 правильно, это все, что вам нужно:

Вот упрощенная версия, которая должна работать.

int prev1 = 0; 
int prev2 = 1; 
int end = 10; 

for (int i = 0; i <= end; ++i) 
{ 
    int next = prev1 + prev2; 
    prev1 = prev2; 
    prev2 = next; 
} 
+0

Спасибо за ваш ответ .. Это помогло мне – harikrishnan