求输入n的阶乘

#include<stdio.h>
int main()
{
int fac(int n);
int n,x;
printf("请输入要求阶乘的数:");
scanf("%d",&n);
x=fac(n);
printf("%d的阶乘是:%d\n",n,x);
return 0;
 } 
 int fac(int n)
 {
  int c;
  if(n<0)printf("错误,请重新输入:\n");
  else if(n==0||n==1)c=1;
  else c=fac(n-1)*n;
  return c;
 }
在C语言中计算n的阶乘是一个常见的练习题目,它不仅能帮助理解循环结构还能加深对函数递归的认识。下面我会详细介绍如何通过非递归(迭代)的方式以及递归的方式来实现这个功能。 ### 迭代方式 使用`for`循环是最直观的做法之一: ```c #include <stdio.h> unsigned long long factorial(int n){ unsigned long long result = 1; for (int i=1; i<=n; ++i) result *= i; return result; } int main(){ int number; printf("输入一个正整数: "); scanf("%d", &number); if(number >= 0){ printf("%d 的阶乘是 %llu\n", number, factorial(number)); } else { printf("负数没有阶乘。\n"); } return 0; } ``` 此程序首先从用户那里接收输入值'n', 然后调用factorial() 函数来计算并返回结果. ### 递归方式 如果想采用更数学化的视角来看待这个问题,则可以考虑利用递归来解决: ```c #include <stdio.h> // 定义递归函数 unsigned long long recursiveFactorial(int n){ // 基础情况 - 当 n <= 1 时停止递归 if(n == 0 || n == 1) return 1; // 递归步骤 return n * recursiveFactorial(n - 1); } int main(){ int num; printf("输入一个正整数: "); scanf("%d",&num); if(num >= 0){ printf("%d 的阶乘是 %llu\n", num, recursiveFactorial(num)); }else{ printf("负数没有阶乘。\n"); } return 0; } ``` 这里我们定义了一个名为 `recursiveFactorial()` 的递归函数用于计算阶乘,并且同样包含了检查是否为负数值的情况处理。 需要注意的是,在实际应用当中由于整形变量存在溢出风险,因此对于较大的数字应选用更大范围的数据类型如上述例子中的`unsigned long long`, 或者改用其他能够支持大数运算的语言和技术栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值