///十进制转二进制
void dectobin( int n )
{
if(n==0) return;
dectobin(n/2);
printf("%d",n%2);
}
///递归求斐波那契数列
int fib(int n)
{
if(n==1 || n==2) return 1;
return fib(n-1)+fib(n-2);
}
///递归求斐波那契数列,打表法
int a[47];
int fib(int n)
{
if(n==1 || n==2) return a[1]=a[2]=1;
if(!a[n])
{
return a[n]=fib(n-1)+fib(n-2);
}
else
return a[n];
}
//尾递归求斐波那契数列,
///ret1是斐波那契数列的第一项,ret2为第二项
int fibTR(int n,int ret1,int ret2)
{
if(n==1) return ret1;
return fibTR(n-1,ret2,ret1+ret2);
}
///尾递归求n的阶乘
///a保存从后往前的乘积
int factTR(int n,int a)
{
if(n==0 || n==1) return a;
return factTR(n-1,n*a);
}
int main(int argc, char const *argv[])
{
int n;
while (scanf("%d", &n) != EOF) {
printf("%d\n", factTR(n,1));
}
return 0;
}