为什么我的代码有效?简单算术

Why does my code work? Simple arithmetics

我正在编写一个简单的代码来计算 Fabonacci 数作为练习。代码有效,但我不明白为什么。 n=1n=2 有一些特殊情况,它们是序列中数字的位置(数字是 0 和 1)。然而在这些之后,这个数字是在这个循环中计算的。

while(n>LoopCount)
{

    Fib_n=Fib_1+Fib_2;

    Fib_2=Fib_1;

    Fib_1=Fib_n;

    LoopCount++;
}

进入循环,Fib_1=0Fib_2=0Fib_n=1。为什么这个循环无论如何都不会吐出 0 ?完整代码如下。

#include <iostream>

using namespace std;

int main()  
{
    cout <<"Which number of the Fibonacci sequence do you want to calculate?" <<endl;

    int n;
    cin >>n;
    cout <<endl;

    int Fib_n;
    int Fib_1;
    int Fib_2;
    int LoopCount=1;

    if(n>1)
    {
        Fib_n=1;
        LoopCount++;

        while(n>LoopCount)
        {

            Fib_n=Fib_1+Fib_2;

            Fib_2=Fib_1;

            Fib_1=Fib_n;

            LoopCount++;
        }
    }

    cout <<Fib_n;

    return 0;
}
int Fib_1;
int Fib_2;

从未初始化。因此,第一次计算Fib_n=Fib_1+Fib_2;时,Fib_n会得到两个未初始化变量的和

我已经修改了你的代码,所以它可以工作。

#include <iostream>

using namespace std;

int main()  
{
    cout <<"Which number of the Fibonacci sequence do you want to calculate?" <<endl;

    int n;
    cin >> n;
    cout << endl;

    int Fib_1 = 1;
    int Fib_2 = 1;

    int count = 0;

    while(n > count)
    {
        Fib_1 = Fib_1 + Fib_2;
        Fib_2 = Fib_1 - Fib_2;
        count++;
    }

    cout << Fib_1;
    return 0;
}
Fib_1

你将它作为一个未初始化的变量,所以你可能会得到一个垃圾值作为输出。

Fib_2 = Fib_1

接下来,您将 Fib_2 初始化为 Fib_1,这意味着它们共享相同的(随机)值。

在调试模式下,它们都初始化为0,并添加它们:

Fib_n=Fib_1+Fib_2;

使总和等于 0。在发布模式下,您可以期望来自编译器的随机值。这里有更多关于 Uninitialized Variables.

的信息