C++ VS代码在重新运行代码时产生不同的输出
我正在尝试一个简单的Fibonacci系列程序,在VS代码上使用memonization,但是在重新运行时,输出在所有0和实际输出之间切换。 这是密码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,
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;
}