C++ VS代码在重新运行代码时产生不同的输出

C++ VS代码在重新运行代码时产生不同的输出,c++,visual-studio-code,C++,Visual Studio Code,我正在尝试一个简单的Fibonacci系列程序,在VS代码上使用memonization,但是在重新运行时,输出在所有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,

我正在尝试一个简单的Fibonacci系列程序,在VS代码上使用memonization,但是在重新运行时,输出在所有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);
}
但当我不使用递归,而是使用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;
}
void fibo(int n)
{
int*a=新的int[n];
a[0]=1;
a[1]=1;

您的程序是否有与越界内存访问相关的未定义行为。这是一个非常好但奇怪的例子UB@NamanMehta此if语句如果(arr[n]>0)调用未定义的行为。数组没有索引为n的元素。
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;
}