[题解] P5739 【深基7.例7】计算阶乘

知识铺垫

用户可以优先阅读 函数递归 相关知识点。

递归的本质就是写一个自己调用自己的函数。但是需要注意的是,函数不能无限地去自己调用自己。

如下面的 work(n) 会调用 work(n - 1),而 work(n - 1) 会调用 work(n - 2),以此类推。

这个时候我们应当写一个终止条件,当函数递归到 \(1\),即 \(x = 1\) 的时候,终止函数。

long long work(int n)
{
    if (n == 1) // 函数调用终止条件,当函数调用到 x = 1 的时候,就停止
    {
        return 1;
    }
    else // 否则调用 work(n - 1),返回 n * work(n - 1)
    {
        return n * work(n - 1);
    }
}

题目分析

本题可以采用循环的方法解决(但题目不允许)。

我们可以采用递归的方法解决这道题。

本题求 \(n!\),也就是 \(1 \times 2 \times 3 \dots \times n\)

我们可以采用递归的方法从大到小依次递归,最终直接输出 work(n)

需要注意的是:本题的数据范围是 \(1 \le n \le 12\)。当 \(n = 12\) 时,\(n!\) 超过了 int 范围,所以应当使用 long long

代码

// P5739 【深基7.例7】计算阶乘
// code by:cq_irritater
// time:2025/06/26
#include <bits/stdc++.h>

using namespace std;

int n;

long long work(int n)
{
    if (n == 1)
    {
        return 1;
    }
    else
    {
        return n * work(n - 1);
    }
}

int main()
{
    // freopen("code.in", "r", stdin);
    scanf("%d", &n);
    printf("%lld", work(n));
    return 0;
}

posted @ 2025-07-28 16:41  cq_irritater  阅读(214)  评论(0)    收藏  举报