例30:C语言求n!,要求用递归实现。

 

解题思路:本题和例29思想差不多,都是用递归来实现,读者可以回顾一下《C语言 | 递归求年龄

 

求阶乘函数:

 

int factorial(int number)//自定义阶乘函数
{
  int temp;//定义整型变量
  if(number<0)//如果这个数小于0
  {
    printf("错误数据请,输入大于0的数!");//不符合条件,无法求
  }
  else if(number==0||number==1)//0或者1本身的阶乘是1
  {
    temp=1;
  }
  else
  {
    temp=factorial(number-1)*number;//否则求这个数与前一个数相乘的结果
  }
  return temp;//将temp返回到函数调用处
}

源代码演示:#include<stdio.h>//头文件
int main()//主函数
{
  int factorial(int number);//自定义阶乘函数声明
  int number,temp;//定义变量
  printf("输入要求阶乘的数:");//提示语句
  scanf("%d",&number);//键盘输入相求的数
  temp=factorial(number);//调用阶乘函数
  printf("%d!=%d",number,temp) ;//输出结果
  return 0;//主函数返回值为0
}
int factorial(int number)//自定义阶乘函数
{
  int temp;//定义整型变量
  if(number<0)//如果这个数小于0
  {
    printf("错误数据请,输入大于0的数!");//不符合条件,无法求
  }
  else if(number==0||number==1)//0或者1本身的阶乘是1
  {
    temp=1;
  }
  else
  {
    temp=factorial(number-1)*number;//否则求这个数与前一个数相乘的结果
  }
  return temp;//将temp返回到函数调用处
}编译运行结果如下:输入要求阶乘的数:5
5!=120
--------------------------------
Process exited after 1.553 seconds with return value 0
请按任意键继续. . .上述代码我定义的是int类型,因为这个数不可能无限大,如果特别大,会超过int的范围,如下:输入要求阶乘的数:100
100!=0
--------------------------------
Process exited after 1.575 seconds with return value 0
请按任意键继续. . .

留个问题给读者请思考,最大可以求几的阶乘,为什么?