怎样的做法才能做到运行不超时?所以这道题不能用递归吗?

图片说明图片说明
//Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

#include <iostream>
using namespace std;
int fun(int n)
{
    if (n == 1 || n == 2)
        return 1;
    else
        return fun(n - 1) + fun(n - 2);
}
int main()
{
    int n;
    cin >> n;
    cout << (fun(n) % 10007);
    return 0;
}
不要用递归
int main()
{
    int n;
    cin >> n;
    if (n == 1 || n== 2) cout << 1;
        int a = 1;
        int b = 1;
        for (int i = 2; i < n; i++)
        {
        b = a + b;
        a = b - a;
        }
        cout << b % 10007;
    return 0;
}