Stack overflow Фибоначчи

стоит задача вычислить n число Фибоначчи. Вроде все работает, но на числах больше 1000(на глаз :) программа прерывается из-за Stack overflow. Кто может подсказать причину данного проишествия? Мне не хватает вместительности переменной? Или же есть какой-то иной путь решения задачи(точнее записи промежуточных значений)

#include <iostream>
#include <math.h>

using namespace std;
long fibo(int n)
{
    if (n<=2)
    {
        return 1;
    }
    else
    {
        return fibo(n - 1) + fibo(n - 2);
    }
}

int main()
{
    int n;
    cin >> n ;
    cout << fibo(n);    
}

Ответы (2 шт):

Автор решения: SovaSasha

Вы вызываете метод fibo рекурсией. Если посмотрите в стек вызовов то увидите что каждый вызов этого метода создаёт ещё несколько рекурсий этого же метода вот здесь

return fibo(n - 1) + fibo(n - 2);

Неплохая статья для примера возможного решения. https://habr.com/ru/post/261159/ Я бы использовал цикл внутри метода.

→ Ссылка
Автор решения: Pocket

Код ниже, он будет работать с небольшими числами, если пишет "stack overflow" то это скорее памяти не хватает для записи числа.

int fibonacci_number(int pos)
{
    if (pos < 2)
        return pos;
    return fibonacci_number(pos - 1) + fibonacci_number(pos - 2);
}

Что б выделить больше памяти, следует писать так:

long long fibonacci_number_fast(long long pos, long long a = 0, long long b = 1)
{
    if (pos == 0)
        return a;
    return fibonacci_number_fast(pos - 1, b, a + b);
}

Вторая функция будет очень быстро обрабатывать большие числа.

→ Ссылка