Menu
CoddyTech

递归计算阶乘

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 46 课,共 56 课。

一个数的阶乘是展示递归如何运作的绝佳例子。n 的阶乘(写作 n!)是从 1 到 n 的所有正整数的乘积。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。

阶乘非常适合用递归实现,因为它可以用自身来定义:n! = n × (n-1)!。这意味着,要计算 5!,你需要用 5 乘以 4!;要计算 4!,你需要用 4 乘以 3!,以此类推。

递归阶乘函数如下所示:

int factorial(int n) {
    if (n <= 1) {           // 基本情况:0! 和 1! 都等于 1
        return 1;
    }
    
    return n * factorial(n - 1);  // 递归步骤:n! = n × (n-1)!
}

当 n 达到 1 或 0 时,基准情形会停止递归并返回 1。递归步骤会将当前数字乘以小一个数字的阶乘。调用 factorial(4) 时,它会通过连续调用计算 4 × 3 × 2 × 1,直到达到基准情形,然后在各次调用返回时将所有结果相乘。

challenge icon

挑战

简单

创建一个实现递归阶乘函数的程序,并用它计算不同输入值的阶乘。这个挑战将通过让函数使用修改后的参数调用自身,直到到达基本情况,来检验你对递归工作原理的理解。

将提供以下输入:

  • 一个整数 n,表示要计算阶乘的数字

你的程序应:

  1. 创建一个名为 factorial 的递归函数,该函数接收一个整数参数并返回一个整数
  2. 该函数应实现基本情况:如果 n 小于或等于 1,则返回 1
  3. 该函数应实现递归步骤:返回 n 乘以 n-1 的阶乘
  4. 在 main 函数中,读取输入值
  5. 使用输入值调用阶乘函数
  6. 按照指定格式输出结果

请使用以下确切的输出格式:

Factorial of [n] is [result]

请记住,阶乘函数每次都必须使用更小的值调用自身,通过每次递归调用不断接近基本情况。当 n 达到 1 或 0 时,基本情况会停止递归,从而防止无限递归。递归步骤会将当前数字乘以小一个数字的阶乘,随着函数调用逐步返回值,最终得到结果。

亲手试试

#include <iostream>
using namespace std;

// TODO:在这里编写阶乘函数

int main() {
    // 读取输入
    int n;
    cin >> n;
    
    // TODO:调用阶乘函数并保存结果
    
    // 输出结果
    cout << "Factorial of " << n << " is " << result << endl;
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器