当前位置:首页>java>【C/C++编程】计算阶乘--函数递归调用

【C/C++编程】计算阶乘--函数递归调用

  • 2026-08-27 11:28:52
【C/C++编程】计算阶乘--函数递归调用
前面我们学习了如何定义自己的函数并调用,我们都是在main中调用其它的功能函数,实际上main也是一个函数,也就是说函数之前是可以相互调用的,比如a函数调用b函数,b函数又调用c函数,聪明的你是不是想到,我可不可以使用a函数再调用a函数呢?没错,也可以,这是程序开发中相当重要的一个概念---递归调用。
递归调用在程序中非常常见,适用于解决问题本身可以被分解为规模更小,但结构与原问题相同的子问题。可能不太好理解,我们来举个例子,我们知道阶乘计算公式为 n! = n * (n - 1)!,看这个公式,如果我们要计算n的阶乘,我们只要计算出(n-1)的阶乘,再乘以n就行,如果要计算(n-1)的阶乘就要计算(n-2)的阶乘,再乘以(n-1),依次类推直接n为0是,0的阶乘为固定值1,0的阶乘为1可以理解为递归的终止条件,一个递归函数一定要有终止条件,否则一直递归计算下去就没有意义了。
#include <stdio.h>int factorial(int n) {  printf("需要计算%d的阶乘\n", n);  // 终止条件   if (n == 0) {    printf("已经计算%d的阶乘为%d\n", 0, 1);    return 1;  }  // 递归计算,使用n * (n-1)!   int result = n * factorial(n-1);  printf("已经计算%d的阶乘为%d\n", n, result);  return result;}int main() {  int num;  printf("输入要计算几的阶乘:");  scanf("%d", &num);  // 调用函数计算   int result = factorial(num);  printf("%d的阶乘为%d\n", num, result);  return 0;}
通过打印出来的日志,我们可以看到程序先从10执行到了0,才开始给出结果,又从0依次计算到了10的结果结束。
递归调用不是太好理解,我们尝试在调用过程中把计算的顺序打印出来方便理解,这点在我们学习的过程中很重要,可以辅助我们去理解程序执行过程。
好了,今天我们的学习就到这里,我是zeroshen,一个大厂c/c++后端开发牛马,欢迎关注交流。为了积累教学经验,如果有想学编程的小伙伴可以私信我添加微信免费指导。

最新文章

随机文章