21xrx.com
2025-04-26 21:00:56 Saturday
文章检索 我的文章 写文章
C语言中如何计算一个数的阶乘
2023-06-15 15:02:17 深夜i     20     0
C语言 阶乘 循环 递归 函数 程序性能

在C语言中,计算一个数的阶乘是一项基本的数学操作,可以使用循环或递归的方式实现。阶乘的定义是从1到该数的所有整数的乘积。例如,5的阶乘等于1×2×3×4×5,即120。

使用循环计算一个数的阶乘需要先定义一个变量来存储结果,然后使用for循环来遍历从1到该数的所有整数,并将每个整数相乘。以下是使用循环计算阶乘的示例代码:

#include 
int main() {
  int num, i;
  unsigned long long fact = 1;
  
  printf("请输入一个整数:");
  scanf("%d", &num);
  
  // 如果输入的是负数,则输出错误信息
  if (num < 0)
    printf("错误!负数没有阶乘。");
  else {
    for (i = 1; i <= num; ++i) {
      fact *= i;  // 等同于 fact = fact * i;
    }
    printf("%d 的阶乘 = %llu", num, fact);
  }
  
  return 0;
}

在上述代码中,输入一个数并赋值给变量num,然后使用if语句检查该数是否为负数。如果是负数,则输出错误信息;否则,使用for循环计算阶乘。计算过程中,使用fact变量来存储结果,每次循环将当前整数乘到结果中。

另一种计算阶乘的方法是使用递归。递归是一种函数调用自身的技术,可以使用较少的代码来实现相对复杂的算法。以下是使用递归计算阶乘的示例代码:

#include 
unsigned long long factorial(int);
int main() {
  int num;
  
  printf("请输入一个整数:");
  scanf("%d", &num);
  
  // 如果输入的是负数,则输出错误信息
  if (num < 0)
    printf("错误!负数没有阶乘。");
  else
    printf("%d 的阶乘 = %llu", num, factorial(num));
  
  return 0;
}
unsigned long long factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n - 1);
}

在上述代码中,使用了一个名为factorial的递归函数来计算阶乘。如果函数的参数为0,则返回1;否则,返回参数n与factorial(n-1)的乘积。在主函数中,输入一个数并调用递归函数,输出结果。

通过上述两种计算阶乘的方法,我们可以看出循环和递归的实现方式各有优劣。循环代码显式地展示计算过程,易于理解和调试;递归代码则具有更好的可读性和简洁性,但可能对内存和程序性能产生负面影响。

  
  

评论区

请求出错了