1

我正在考虑斐波那契数列的递归方法的复杂性,我想尝试将数字存储在一个向量中,以便我的程序可以查看向量包含的最后两个数字以产生下一个。我编写了一个程序,我认为会使用指向向量最后一个元素的指针将下一个数字附加到 fibs 向量,但没有任何反应(当我在调用程序后打印向量时,它仍然只包含 0 和 1,我手动附加为边缘条件。

这是范围问题吗?

vector<int>fibs;
template <typename Iterator>
void newfib(Iterator it) {
   fibs.push_back(*(it-1)+*(it-2));
 }     

int main () {

vector<int>fibs;
fibs.push_back(0); fibs.push_back(1);
newfib(fibs.end());
return 0;
}

谢谢您的帮助!

4

4 回答 4

2

您声明了两个具有相同名称的 verctor:一个在全局范围内,第二个在 main 函数中。在函数newfib中附加到全局向量,但在主函数中打印本地,保持不变。

例如,我建议避免使用全局变量并通过引用传递向量。

于 2013-08-12T09:34:04.713 回答
0

这是一个范围问题。newfib只知道全局fibs对象。main对本地fibs对象进行操作。

于 2013-08-12T09:34:06.830 回答
0

内部声明的fibs向量main()隐藏了main()函数中全局声明的向量。但是,在newfib()函数中,使用了全局fibs向量。

这里最简单的解决方法是fibs删除main(). 但是,此代码需要大量工作才能准备好迎接黄金时段。

于 2013-08-12T09:34:15.263 回答
0

有两个同名的向量对象——一个在命名fibs空间级别,另一个在main()函数中。

无论您在newfib()函数中做什么,都不会更改函数中的对象fibsmain()因为它是本地的并newfib()修改了全局对象。

于 2013-08-12T09:35:14.877 回答