骨牌铺方格,这个程序有什么问题

#include
int sum(int a)
{
if(a==1)
return 1;
if(a==2)
return 2;
if(a>2){

    return sum(a-1)+sum(a-2);
}

}

int main()
{
__int64 a;
int n;
while(~scanf("%d",&n)&&n<=50){
a=sum(n);
printf("%I64d\n",a);
a=0;
}
return 0;

}

https://blog.csdn.net/fyq_sdut/article/details/81912341

堆栈次数太多,用递归太耗时了,改成循环