Числа Фибоначчи на C++

Решаю задачу на сайте. Нужно написать программу для вычисления чисел Фибоначчи. Написал первую программу, сайт сказал, что она выполнялась слишком долго и была прервана. Переделал решение. У меня всё работает, но сайт почему-то говорит, что программа выдаёт ошибку в процессе выполнения. Проблема во мне или в тестирующей системе?

#include <iostream>
using namespace std;

int fib(int n){
    int arr[n]{0,1};
    for(int i=2;i<=n;i++){
        arr[i] = arr[i-1] + arr[i-2];
    }
    return arr[n];
}
int main(){
    int n;
    cin >> n;
    cout << fib(n) << endl;
    return 0;
}

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

Автор решения: Harry
int fib(int n)
{
    int a = 0, b = 1;
    for(int i=2;i<=n;i++)
    {
        int с = a + b;
        a = b;
        b = c;
    }
    return b;
}

Так не хотите? И за границы массива не выскочите - из-за отсутствия массива :)

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

В int входит только 46 чисел Фибоначчи, их можно просто вручную записать в массив, скопировав из таблички, и выдавать нужное по индексу.

int fib(int n) {
    if ((n > 45) || (n < 1)) { return -1} // ошибка 
    int fib[] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903};
    return fib[n-1];
}
→ Ссылка