2016-02-11 14 views
-1

我寫了這個C++程序,這是假設做Fibonacci序列。問題一旦我通過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

歡迎來到Stack Overflow!這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:[如何調試小程序](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

點上做了什麼以獲得第n個(稱爲'c')項,我們將使用第(n-2)個(稱爲'a')和第(n-1)個(說'b')的條款。所以a = b,b = c意味着下一個(n + 1),我們將使用第n個和第(n-1)個項。所以對於下一次迭代'c'將被用作'b'和' b'將變成'a'來計算新的'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; 
} 

它的工作原理是因爲從數學上講,序列中的每個連續值都是根據其前身來定義的。代碼簡單地遵循這種模式。這種技術(根據自身來定義某些東西)被稱爲「遞歸」,這是很多人遇到的問題。

第一個調用(在main中)設置初始值(1和1)以及迭代次數(8)。函數本身打印這些值加上它們的總和(容易到目前爲止,對不對?),然後通過調用本身以適當的值開始下一次迭代。 if語句對於確保我們在正確的迭代次數後停止是必要的。

如果您在理解這一點時遇到困難,只需按照控制流程(也許寫在一張紙上):首先我們調用fib(1,1,8),下一個調用將是fib(1,2 ,7),然後是fib(2,3,6),然後是fib(3,5,5),直到我們達到最後一個參數的零值。希望這可以幫助!

+0

它的工作原理,但你可以向我解釋,函數如何工作? –