【发布时间】:2013-09-11 21:17:34
【问题描述】:
所以我只是在练习编写斐波那契数列的动态解决方案,它会返回第 n 个斐波那契数,但我一直遇到一个我无法弄清楚的问题。我得到两个正数加上一个负数!
代码:
int fib(int n) {
vector<int> v;
v.push_back(1);
v.push_back(1);
for (int i = 2; i <= n; i++) {
v.push_back( v.at(i-1) + v.at(i-2) );
cout << v.at(i-1) << " + " << v.at(i-2) << " = " << (v.at(i-1) + v.at(i-2)) << endl;
}
return v.at(n);
}
尝试运行 fib(50),注意 cout 仅用于调试
【问题讨论】:
-
由于有符号整数溢出,您的行为未定义。
-
他们只是不再教计算机如何工作,是吗?无需了解整数算术,有符号与无符号。只有高级语言,所以当一个 int 不够大时会让人感到惊讶。
-
我两年前刚从大学毕业,我们甚至详细了解了 float 和 doubles 的工作原理,所以他们确实教过这类东西……但我猜有人没注意 :D
-
@CareyGregory,根据我的经验,不,他们没有。我在中学时将编程作为一种爱好,当我上高中时,我参加了两个可用的编程课程,但从未教过。我不能告诉你它是否在我的大学里教过,因为我测试了编程课程。不过肯定没有参加任何考试。
标签: c++