3-3 分数3 用递归函数[1]实现n!本题要求定义一个递归函数fact(n),计算非负整数n的阶乘,其中n的类型是int,函数类型是double。[ C++ ]1 double fact(int n)2 {3456789101112}131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
题目解答
答案
这是一道关于使用递归函数计算阶乘的C++编程题。我们需要根据题目给出的函数框架,填入缺失的代码以实现计算非负整数 $n$ 的阶乘。
推理过程:
-
理解阶乘的递归定义:
非负整数 $n$ 的阶乘(记作 $n!$)可以通过递归方式定义:- 基准情况(Base Case):当 $n = 0$ 或 $n = 1$ 时,$n! = 1$。
- 递归步骤(Recursive Step):当 $n > 1$ 时,$n! = n \times (n-1)!$。
-
分析给定的C++函数结构:
double fact(int n) { double result; if (__________) { __________; } else { __________; } return result; }函数接收一个
int类型的参数n,返回一个double类型的结果。函数内部定义了一个double类型的变量result用于存储最终的计算结果。 -
确定
if语句的条件(第一个空):
我们需要在if语句中处理递归的基准情况,也就是递归的终止条件。对于阶乘,当 $n$ 等于 0 或 1 时,结果都是 1。因此,条件可以写成n == 0或者n == 1。考虑到题目要求计算“非负整数”,使用n == 0或n == 1都可以作为递归的出口。 -
确定
if语句块内的操作(第二个空):
如果满足基准情况(即 $n$ 为 0 或 1),阶乘的结果是 1。我们需要将这个结果赋值给变量result,以便后续返回。因此,这里应填入result = 1。 -
确定
else语句块内的操作(第三个空):
如果不满足基准情况(即 $n > 1$),我们需要执行递归计算。根据公式 $n! = n \times (n-1)!$,当前结果应该是 $n$ 乘以调用自身函数fact(n-1)的结果。因此,这里应填入result = n * fact(n - 1)。
最终答案:
根据以上推理,代码中的三个空应分别填入:
- 第一空(if 条件):
n == 0或n == 1 - 第二空(if 块内):
result = 1 - 第三空(else 块内):
result = n * fact(n - 1)
解析
本题考查递归函数的使用以及阶乘的计算。解题的关键在于理解阶乘的递归定义,并将其转化为C++代码。
阶乘的递归定义
- 基准情况(Base Case):当 $n = 0$ 或 $n = 1$ 时,$n! = 1$。
- 递归步骤(Recursive Step):当 $n > 1$ 时,$n! = n\times(n - 1)!$。
代码分析
给定的C++函数框架如下:
double fact(int n) {
double result;
if (__________) {
__________;
} else {
__________;
}
return result;
}
函数接收一个 int 类型的参数 n,返回一个 double 类型的结果。函数内部定义了一个 double 类型的变量 result 用于存储最终的计算结果。
具体填空分析
- 确定
if语句的条件(第一个空):
我们需要在if语句中处理递归的基准情况,也就是递归的终止条件。对于阶乘,当 $n$ 等于 0 或 1 时,结果都是 1。因此,条件可以写成n == 0或者n == 1。考虑到题目要求计算“非负整数”,使用n == 0或n == 1都可以作为递归的出口。 - 确定
if语句块内的操作(第二个空):
如果满足基准情况(即 $n$ 为 0 或 1),阶乘的结果是 1。我们需要将这个结果赋值给变量result,以便后续返回。因此,这里应填入result = 1。 - 确定
else语句块内的操作(第三个空):
如果不满足基准情况(即 $n > 1$),我们需要执行递归计算。根据公式 $n! = n\times(n - 1)!$,当前结果应该是 $n$ 乘以调用自身函数fact(n - 1)的结果。因此,这里应填入result = n * fact(n - 1)。