首页 > 解决方案 > VS Code 在重新运行代码时产生不同的输出

问题描述

我正在尝试一个简单的斐波那契数列程序,在 VS 代码上使用记忆,但是在重新运行时,输出在全 0 和实际输出之间切换。这是代码

int fib(int n, int *arr)
{
    if(n <= 1)
    {
        arr[n] = 1;
        return 1;
    }
    if(arr[n]>0)
        return arr[n];
    int a = fib(n-1, arr) + fib(n-2, arr);
    arr[n] = a;
    return a;
}
int fibo_1(int n)
{
    int *arr = new int[n];
    for(int i=0; i<n; i++)
        arr[i] = 0;
    fib(n, arr);
    for(int i=0; i<n; i++)
        cout << arr[i] << " ";
    delete [] arr;
}
int main()
{
    int n=10;
    fibo_1(n);
}

没有模式,它只是随机切换到 0 和实际输出。不同的输出:

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci
0 0 0 0 0 0 0 0 0 0 
[Done] exited with code=0 in 0.996 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci
1 1 2 3 5 8 13 21 34 55 
[Done] exited with code=0 in 1 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci

1 1 2 3 5 8 13 21 34 55 
[Done] exited with code=0 in 1.287 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci

0 0 0 0 0 0 0 0 0 0 
[Done] exited with code=0 in 0.834 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci

1 1 2 3 5 8 13 21 34 55 
[Done] exited with code=0 in 0.862 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci

0 0 0 0 0 0 0 0 0 0 
[Done] exited with code=0 in 0.791 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci

0 0 0 0 0 0 0 0 0 0 
[Done] exited with code=0 in 0.797 seconds

[Running] cd "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\" && g++ fibonacci.cpp -o fibonacci && "c:\Users\naman\Google Drive\Coding\CodeBlocks\Code Blocks\"fibonacci

1 1 2 3 5 8 13 21 34 55 
[Done] exited with code=0 in 0.8 seconds

但是当我不使用递归,而是使用 dp 方法时,一切正常。

void fibo(int n)
{
    int *a = new int[n];
    a[0] = 1;
    a[1] = 1;
    cout << a[0] << " " << a[1] << " ";
    for(int i=2; i<n; i++)
    {
        a[i] = a[i-1] + a[i-2];
        cout << a[i] << " ";
    }
    delete [] a;
}

怎么了?

标签: c++visual-studio-code

解决方案


推荐阅读