我在考虑对fibonnaci序列的递归方法的复杂性,我想尝试将数字存储在一个向量中,这样我的程序就可以查看向量包含的最后两个数字来生成下一个数字。我编写了一个程序,我认为会使用指向向量最后一个元素的指针将下一个数字附加到fibs向量,但没有任何反应(当我在调用过程后打印向量时,它仍然只包含0和1 i作为manualy附加边缘条件。
这是范围问题吗?
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;
}
感谢您的帮助!
答案 0 :(得分:2)
声明两个具有相同名称的verctor:一个在全局范围内,第二个在main函数中。在函数newfib
中,您附加到全局向量,但在main函数中,您打印本地,它保持不变。
我建议避免使用全局变量并通过引用传递向量,例如。
答案 1 :(得分:0)
这是一个范围问题。 newfib
只知道全局fibs
对象。 main
对本地fibs
对象进行操作。
答案 2 :(得分:0)
fibs
内声明的main()
向量隐藏了main()
函数内全局声明的向量。但是,在newfib()
函数中,将使用全局fibs
向量。
此处最简单的解决方法是删除fibs
中的main()
声明。但是,这个代码在准备好黄金时间之前需要做很多工作。
答案 3 :(得分:0)
有两个相同名称fibs
的矢量对象 - 一个在命名空间级别,另一个在main()
函数中。
无论您在newfib()
函数中执行什么操作,都不会更改fibs
函数中的对象main()
,因为它是 local 和newfib()
修改全局。