C语言 | 递归求n的阶乘

举报
C语言入门到精通 发表于 2021/02/09 23:11:52 2021/02/09
【摘要】 例30:C语言求n!,要求用递归实现。解题思路:本题和例29思想差不多,都是用递归来实现,读者可以回顾一下《C语言 | 递归求年龄》求阶乘函数:int factorial(int number)//自定义阶乘函数 { int temp;//定义整型变量 if(number<0)//如果这个数小于0 { printf("错误数据请,输入大于0的数!");//不符...

例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
请按任意键继续. . .

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

C语言 | 递归求n的阶乘 mp.weixin.qq.com图标

文章来源: zhuanlan.zhihu.com,作者:小林C语言,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuanlan.zhihu.com/p/336922554

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。