почему std :: map вызывает исключение? - PullRequest
0 голосов
/ 09 февраля 2012

Я запускаю этот код, используя как 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 ]

1 голос
/ 09 февраля 2012

При запуске кода у меня возникла исключительная ситуация переполнения стека, очевидно из-за слишком глубокой рекурсии.Вам следует либо увеличить размер стека (но позже вы можете ввести большее число и снова получить то же исключение), либо преобразовать этот алгоритм в нерекурсивный (например, см. Этот: http://www.codeproject.com/Tips/109443/Fibonacci-Recursive-and-Non-Recursive-C)

1 голос
/ 09 февраля 2012

Вы пытались ввести отрицательные числа?Вы не проверяете входные данные, передаваемые в вашу программу, и в

return fib[i];

вы получите сообщение об ошибке, если попытаетесь получить доступ к несуществующим местоположениям.

...