c++斐波那契错误
C++ Fibonacci Errors
我在这个非递归斐波那契函数上遇到了一些麻烦。我正在使用这个数字数组并将其传递给FiboNR
,但是我得到了大的负值和访问违规错误。
int n[15] = { 1,5,10,15,20,25,30,35,40,45,50,55,60,65,70 };
int FiboNR(int n) // array of size n
{
int const max = 100;
int F[max];
F[0] = 0; F[1] = 1;
for (int i = 2; i <= n; i++) {
F[n] = F[n - 1] + F[n - 2];
}
return (F[n]);
}
这个函数是由讲师提供的,如果他给出了这个函数,我认为它是正确的,但是由于这些内存错误,我不完全理解发生了什么。我调用in循环的唯一方法是遍历数组并输出答案,如cout << FiboNR(n[i]);
首先,您的麻烦在循环中。替换:
F[n] = F[n - 1] + F[n - 2];
:
F[i] = F[i - 1] + F[i - 2];
因为i是你的迭代器,而n只是极限。
仅供参考,返回语句中的大括号( )
是不需要的,您可以忽略它们。
我正在使用这个数字数组并将其传递给FiboNR
您不应该这样做,因为FiboNR()将其参数例外为整数(一个,而不是整数数组)。因此,您应该只向函数传递一个数字,如:FiboNR(n[2])
。
由于int数组(n> 46)的int溢出,您得到一个负数。
将数组类型从int改为long long。
其他解决方案:将数组类型更改为结果精度较低的float/double类型或使用长算术。
类型|典型位宽|典型范围
int | 4bytes| -2147483648 to 2147483647
链接:c++数据类型
下面的代码示例:
#include <iostream>
long long FiboNR(int n);
long long FiboNR(int n) {
int const max = 100;
long long F[max];
if (n > max) {
n = max;
}
F[0] = 0;
F[1] = 1;
for (int i = 2; i <= n; i++){
F[i] = F[i - 1] + F[i - 2];
}
return (F[n]);
}
int main() {
for (int i=0; i < 100; i++) {
std::cout << "i = " << i << " : " << FiboNR(i) << std::endl;
}
return 0;
}
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'