当我将其初始化为-1时,为什么我的数组将被填充为零

Jin*_*oss 4 c++ arrays initializer

#include<iostream>
using namespace std;

long long int memo[20] = {-1};       //create memo table  and initialise to -1

long long int fibo(long long int n)
{
    if(memo[n]>-1)           //changing this to if(memo[n]>0) works fine
        return memo[n];      //but as such this gives 0 from all my inputs
    if(n<=2)
        return 1;
    memo[n] =  fibo(n-1) + fibo(n-2);    //recurse
    return memo[n];
}

int main()
{
    long long int n;
    cin>>n;
    cout<<fibo(n)<<endl;       //calls the fibo function 
    for(int i=0;i<20;i++)       //this prints my memo table used...
        cout<<memo[i]<<" ";
}
Run Code Online (Sandbox Code Playgroud)

我正在使用自上而下的dp计算第n个Fibonacci数,但是我的备忘表被清零了.即使在我不感动的地方,为什么呢?

Nat*_*ica 6

当你有

long long int memo[20] = {-1}; 
Run Code Online (Sandbox Code Playgroud)

您没有告诉编译器使用全-1来初始化数组.你要告诉它的是一个初始化列表,并用它的内容初始化数组中的元素.由于列表小于数组,因此每个缺少的初始化程序都会导致编译器初始化相应的元素.