斐波拉西数列运行超时

这个代码输入30就运行超时了,请问怎么改?

# include <stdio.h>
int f( int n )
{
    if(n==0)
        return 0;
    else if(n==1||n==2)
        return 1;
    else
        return f(n-1)+f(n-2);

}

int main ()
{
    int i=1,n;
    scanf("%d",&n);
    while(n!=f(i))
    {
        i++;
    }
    printf("%d",i);
    return 0;
}

供参考:

# include <stdio.h>
int f( int n )
{
    //if(n==0)
    //    return 0;
    //else
    if(n==1||n==2)
        return 1;
    else
        return f(n-1)+f(n-2);
}
int main ()
{
    int i=1,n;
    scanf("%d",&n);
    //while(n!=f(i))
    //{
    //    i++;
    //}
    printf("%d",f(n));//i);
    
    return 0;
}

不好意思,忘记把题目放出来了

img

供参考:

# include <stdio.h>
int f(int n)
{
    if (n == 1 || n == 2)
        return 1;
    else
        return f(n - 1) + f(n - 2);
}
int main()
{
    int i=1, n;
    scanf("%d", &n);
    while(n >= f(i))
    {
        i++;
    }
    printf("%d",i);
    return 0;
}