
//递归求阶乘,代码简洁
#include<stdio.h>
long fact(long n)
{
return n==0?1:n*fact(n-1);//直接对应于阶乘函数的递归形式的数学定义
}
int main()
{
long x;
scanf("%ld",&x);
printf("%ld",fact(x));
return 0;
}
//递归求阶乘,繁琐的代码,考虑周全
#include <stdio.h>
int factorial(int n)
{
int result;
if (n<0) //判断例外
{
printf("输入错误!\n");
return 0;
}
else if (n==0 || n==1)
{
result = 1; //回推墙
}
else
{
result = factorial(n-1) * n; //递推关系,这个数与上一个数之间的关系。
}
return result;
}
int main()
{
int a;
scanf("%d",&a);
printf("%d的阶乘=%d",a,factorial(a));
return 0;
}

//递归试了好多次就是错。。。只能枚举了
#include<stdio.h>
int gcd( int m, int n)
{
int min=m<n?m:n;
int i=min;
if((m!=0&&n==0)||(m==0&&n!=0))
{int a=m>n?m:n;
return a;}
else
for(i;i>=1;i--)
{if(m%i==0&&n%i==0)
return i;
}
}
int main()
{
int m, n;
/*
while (~scanf("%d%d",&m,&n))
看起来是C语言的
ACM中比较常见,其他地方没见过这么写的
功能是循环从输入流读取m和n 直到遇到EOF为止
等同于while (scanf("%d%d",&m,&n)!=EOF)`
EOF不是特殊字符,
而是一个定义在头文件stdio.h的常量,一般等于-1。
#define EOF (-1)
*/
while(~scanf("%d %d",&m,&n))
{ if(!m&&!n) return 0;
/*!是非运算,!A 取A的相反。
!的优先级大于 &&,也就是!先运算
*/
printf("%d\n", gcd( m, n) );
}
return 0; }
浙公网安备 33010602011771号