递归不行吗
#include<stdio.h>
#include<string.h>
// #define N 51
#define ll long long
int fib(int n){
if(n<=1) return 0;
else if(n==2) return 1;
else return fib(n-1)+fib(n-2);
}
int main(){
// int str[N];
int n;
ll res;
scanf("%d",&n);
res=fib(n);
printf("%ld",res);
return 0;
} 