我正在尝试让我的程序打印第 n 个斐波那契数。
I get a stack-corruption-assertion though :
int f[] = { 1, 1 };
int i = 0;
if (n <= 2) {
cout << "F(" << n << ") = 1" << endl;
return 0;
}
if (n>2) {
i = 2;
while (i < n) {
cout << "i =" << i << endl;
cout << f[i - 1] << endl;
cout << f[i - 2] << endl;
f[i] = f[i - 1] + f[i - 2];
i++;
}
cout << "F(" << n << ") = " << f[i-1] << endl;
return 0;
}
最佳答案
原始数组不会按需增长,当 sie 不包含在类型中时,初始化程序用于静态调整它们的大小。
这两个是等价的,都定义了一个包含两个元素的数组:
int f[] = { 1, 1 };
int f[2] = { 1, 1 };
您要使用的是 std::vector
或手动动态重新分配(使用 malloc
、realloc
和 free
或 new[]
、delete[]
和 std::copy
)。
另一个(更好的)选项是观察这样一个事实,即您只需要前 2 个值来计算下一个值,并且只保存这些值。
关于c++ - 围绕变量 `f` 尝试计算斐波那契 (n) 的堆栈损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28384751/