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

  

posted on 2018-02-13 14:49  Vidor  阅读(1454)  评论(0编辑  收藏  举报