我使用gpp和microsoft编译器运行此代码,但在这两种情况下我都有异常 但我不明白为什么! 这是我的代码:
#include <iostream>
#include <map>
using namespace std;
map<int,int> fib;
int fibo(int i)
{
if (!fib.count(i))
{
fib.insert(pair<int, int>(i,fibo(i-1)+fibo(i-2)));
}
return fib[i];
}
int r(int i)
{
if(i<3)
{
return i;
}
else
{
return fibo(i)+r(i-2);
}
}
int main()
{
fib.insert(pair<int, int>(0,1));
fib.insert(pair<int, int>(1,1));
int a,b,n;
cin>>a>>b;
n=b-a;
int fiba=fibo(a);
int fibaa=fibo(a-1);
cout << (r(n+1)*fiba)+(r(n)*fibaa);
return 0;
}
任何人都可以帮助我吗?
我调试了这段代码,发现fib.insert(pair<int, int>(i,fibo(i-1)+fibo(i-2)));
不起作用。
答案 0 :(得分:1)
您是否尝试输入一些负数?您不会检查传递给程序的输入,也不会检查
return fib[i];
如果您尝试访问不存在的位置,则会收到错误。
答案 1 :(得分:1)
我运行代码时遇到Stack Overflow异常,显然是因为递归太深。 您应该增加堆栈大小(但您可以稍后选择输入更大的数字并再次获得相同的异常),或者将此算法转换为非递归的算法(例如,请参阅此一个:http://www.codeproject.com/Tips/109443/Fibonacci-Recursive-and-Non-Recursive-C)