C++ 斐波那契错误
C++ Fibonacci Errors
我在使用这个非递归 Fibonacci 函数时遇到了一些问题。我正在使用这个数字数组并将其传递给 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 只是限制。
仅供参考,return 语句中的大括号 ( )
不需要,您可以忽略它们。
I am using this array of numbers and passing it to FiboNR
你不应该这样做,因为 FiboNR() 除了它的参数是一个整数(一个,不是整数数组)。所以你应该只传递一个数字给你的函数,比如:FiboNR(n[2])
.
由于 int 数组 (n > 46) 的 int 溢出,您得到一个负数。
将数组类型从 int 更改为 long long。
其他解决方案:将数组类型更改为结果精度较低的float/double类型或使用长算法。
类型 |典型位宽 |典型范围
内部 | 4字节| -2147483648 至 2147483647
Link: C++ Data Types
下面的代码示例。
#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;
}
我在使用这个非递归 Fibonacci 函数时遇到了一些问题。我正在使用这个数字数组并将其传递给 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 只是限制。
仅供参考,return 语句中的大括号 ( )
不需要,您可以忽略它们。
I am using this array of numbers and passing it to FiboNR
你不应该这样做,因为 FiboNR() 除了它的参数是一个整数(一个,不是整数数组)。所以你应该只传递一个数字给你的函数,比如:FiboNR(n[2])
.
由于 int 数组 (n > 46) 的 int 溢出,您得到一个负数。
将数组类型从 int 更改为 long long。
其他解决方案:将数组类型更改为结果精度较低的float/double类型或使用长算法。
类型 |典型位宽 |典型范围
内部 | 4字节| -2147483648 至 2147483647
Link: C++ Data Types
下面的代码示例。
#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;
}