[题解] 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;
}