2016-02-11 2 views
-1

Я написал эту программу на C++, которая, как предполагается, выполнит последовательность Фибоначчи. Проблема, как только я пройду 8, последовательность будет плохой, как, например, вместо последнего числа, которое она испортила, я не знаю, как это объяснить, просто прочитайте исходный код, но, пожалуйста, помогите мне, спасибо большое.Как исправить эту последовательность Фибоначчи?

#include <iostream> 
#include <unistd.h> 
using namespace std; 

int main() 
{ 
    sleep(3); 
    cout << "Doing The Fibonacci Sequence"; sleep(5); 
    cout << ""<<endl; 
    for (int num=1; num <= 8; num++) 
    { 
     /*int number, lastnum; 
      lastnum = num - 1; 
      number = num + lastnum; 
      cout << number<<endl; 
     */ 
     for(int i=1; i <= 8; i++) 
     { 
      //cout << num << "+" << i <<endl; 
      int numb = num+i; 
      int nun = numb - 1; 
      int c = nun + i; 
      cout << nun << " + " << i << " = " << c <<endl; 
      num ++; 
     } 

    } 
    return 0; 
} 

/*The Output 
    Doing The Fibonacci Sequence 
1 + 1 = 2 
3 + 2 = 5 
5 + 3 = 8 
7 + 4 = 11 
9 + 5 = 14 
11 + 6 = 17 
13 + 7 = 20 
15 + 8 = 23 

*/ 
+0

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

ответ

0
#include <iostream> 
//#include <unistd.h> 
using namespace std; 

int main() 
{ 
    //sleep(3); 
    int number; 
    cout << "Doing The Fibonacci Sequence"; //sleep(5); 
    cout << ""<<endl; 
    cin>>number; 
    int a=1; 
    int b=1; 

    for (int num=1; num < number-1; num++) 
    { 
     int c=a+b; 
     cout << a << " + " << b << " = " << c <<endl; 
     a=b; 
     b=c; 
    } 
    return 0; 
} 

выход

Doing The Fibonacci Sequence 

8 
1 + 1 = 2 
1 + 2 = 3 
2 + 3 = 5 
3 + 5 = 8 
5 + 8 = 13 
8 + 13 = 21 

проверить код и посмотреть, что может ответить на ваш вопрос.

+0

что он делает в точке a = b и b = c –

+0

, чтобы получить nth (говорит 'c') термин, мы будем использовать и (n-2) th (говорит 'a') и (n-1) th (говорит «b»). Итак, a = b, b = c означает теперь для следующего (n + 1) th, мы будем использовать n-й и (n-1) -й термины. Поэтому для следующей итерации 'c' будет использоваться как 'b'and' b 'станет «а» для вычисления нового «c». Мы назначим предыдущие переменные (a и b) для вычисления нового значения в следующей итерации. –

0

На самом деле ваша последовательность уже плохо на второй итерации, которая должна быть 1 + 2 = 3. А как это исправить ... Числа Фибоначчи являются классическим примером рекурсии, так что используйте, что:

#include <iostream> 
using namespace std; 

void fib (int left, int right, int iterations) { 
    if (iterations > 0) { 
     cout << left << " + " << right << " = " << left + right << endl; 
     fib (right, left + right, iterations - 1); 
    } 
} 

int main() { 
    cout << "Doing The Fibonacci Sequence" << endl; 
    fib (1, 1, 8); 
    return 0; 
} 

Это работает, потому что математически каждое последующее значение в последовательности определяется в терминах ее предшественников. Код просто следует этой схеме. Эта техника (определения чего-то в себе) называется «рекурсией», и с ней очень много людей.

Первый вызов (в основном) устанавливает начальные значения (1 и 1) и количество итераций (8). Сама функция печатает эти значения плюс их сумму (легко до сих пор, правильно?), А затем запускает следующую итерацию, вызывая себя с соответствующими значениями. Оператор if необходим, чтобы гарантировать, что мы остановимся после правильного количества итераций.

Если у вас возникли проблемы с пониманием этого, просто следуйте за потоком управления (возможно, напишите его на листе бумаги): сначала мы называем fib (1,1,8), следующим вызовом будет fib (1,2 , 7), затем fib (2,3,6), затем fib (3,5,5), пока мы не достигнем значения нуля для последнего параметра. Надеюсь это поможет!

+0

это работает, но вы можете мне объяснить, как работает функция plz? –