非递归斐波那契函数

Non recursive fibonacci function

我试图用 C++ 编写非递归斐波那契函数。这是我的代码:

int fib(const int num)
{
    std::vector<int> array{ 0, 1 };
    for (int i = 2; i < num; ++i)
    {
        array[i] = (array[i - 1] + array[i - 2]);
    }
    return array[num];

}

int main()
{
    const int n = 10;
    
    for (int i = 0; i <= n; ++i)
    {
        cout << fib(i) << " ";
    }

}

编译器给我一个“调试断言失败”错误,其中包含一个向量下标超出范围的表达式。你能告诉我这里有什么问题吗?所有索引似乎都在向量的范围内...... 谢谢!

您只用两个成员初始化了 array,因此只有索引 01 有效。当您执行 array[i] 时,您的循环从 2n,这超出了数组的分配范围。要将新元素添加到向量中,您应该改用 push_back()。它将在数组中分配新的 space:

array.push_back(array[i - 1] + array[i - 2]);