非递归斐波那契函数
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
,因此只有索引 0
和 1
有效。当您执行 array[i]
时,您的循环从 2
到 n
,这超出了数组的分配范围。要将新元素添加到向量中,您应该改用 push_back()
。它将在数组中分配新的 space:
array.push_back(array[i - 1] + array[i - 2]);
我试图用 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
,因此只有索引 0
和 1
有效。当您执行 array[i]
时,您的循环从 2
到 n
,这超出了数组的分配范围。要将新元素添加到向量中,您应该改用 push_back()
。它将在数组中分配新的 space:
array.push_back(array[i - 1] + array[i - 2]);