关于c语言的 求快速斐波那契数列数列第n项的问题

#include<stdio.h>
int F (int i)
{
if(i==1)
return 0;
if(i==2||i==3)
return 1;
if(i>=4)
return F(i-1)+F(i-2);
}
int main()
{
int i,n;
scanf("%d",&n);
while(n--)
{
scanf("%d",&i);
printf("%d\n",F(i));
}
return 0;
}初学c我求斐波那契数列第n项用的递归法,但题目要求1<n<1000000,time limit 1000ms递归就不行了,有什么省时有效的方法么,真心求教
#include <stdio.h>
void fun(int a)
{
long 蠢戚如f1,f2,f;
int i;

f1=f2=1;
if(a<带启=2)
f=1;
else
for(i=3;i<=a;i++){
f=f1+f2;
f1=f2;
f2=f;
}
printf("%ld "仔消,f);

}
main( )
{
int n;
scanf("%d",&n);
fun(n);
}