//递归求阶乘,代码简洁 #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; }