为什么std :: map会抛出异常?

时间:2012-02-09 10:50:04

标签: c++ visual-c++ map g++

我使用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)));不起作用。

2 个答案:

答案 0 :(得分:1)

您是否尝试输入一些负数?您不会检查传递给程序的输入,也不会检查

return fib[i];

如果您尝试访问不存在的位置,则会收到错误。

答案 1 :(得分:1)

我运行代码时遇到Stack Overflow异常,显然是因为递归太深。 您应该增加堆栈大小(但您可以稍后选择输入更大的数字并再次获得相同的异常),或者将此算法转换为非递归的算法(例如,请参阅此一个:http://www.codeproject.com/Tips/109443/Fibonacci-Recursive-and-Non-Recursive-C