我如何修复这个Fibonacci序列?

时间:2016-02-11 11:20:35

标签: c++ fibonacci

我写了这个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

*/

2 个答案:

答案 0 :(得分:0)

Doing The Fibonacci Sequence

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

输出

if (Current != null)
{
    selectStart = this.textBox.Text.Length;
    foreach (string s in Current.Details)
    {
        this.textBox.AppendText(s + Environment.NewLine);
    }
    selectEnd = this.textBox.Text.Length;
    this.textBox.Select(selectStart, selectEnd - selectStart);
    this.textBox.SelectionBackColor = Color.FromArgb(51, 255, 51);
}

检查代码并查看它可能会回答您的问题。

答案 1 :(得分:0)

实际上你的序列在第二次迭代时已经坏了,应该是1 + 2 = 3.至于如何解决它... Fibonacci数是递归的经典例子,所以使用:

#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),直到我们达到最后一个参数的零值。希望这可以帮助!