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

时间:2016-09-05 20:49:12

标签: c++ math integer-arithmetic

我正在编写一个简单的代码来计算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;
}

2 个答案:

答案 0 :(得分:1)

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;
}

答案 1 :(得分:0)

Fib_1

您将其作为非正规化变量,因此您可能会获得输出的垃圾值。

Fib_2 = Fib_1

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

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

Fib_n=Fib_1+Fib_2;

使总和等于0.在发布模式下,您可以期望编译器中的随机值。以下是Uninitialized Variables的更多信息。