求1!+3!+5!+……+n!的和
时间: 2023-05-30 13:05:43 浏览: 57
对于奇数 $n$,有 $1! \cdot 3! \cdot 5! \cdots n! = (1!)^{\underline{1}} (2!)^{\underline{1}} (3!)^{\underline{1}} \cdots (n!)^{\underline{1}} = (1!)^{\underline{n}} = n!$,其中 $\underline{k}$ 表示 $k$ 的下降阶乘。因此所求的和为 $1!+3!+5!+\cdots+(2\left\lfloor\dfrac{n}{2}\right\rfloor-1)!$。
考虑将阶乘的奇数项单独提出来,即
\begin{aligned} 1!+3!+5!+\cdots+(2\left\lfloor\dfrac{n}{2}\right\rfloor-1)! &= 1! \cdot (1+3\cdot 2! \cdot (1+5\cdot 4! \cdots (2\left\lfloor\dfrac{n}{2}\right\rfloor-1)!)) \\ &= 1! \cdot \sum_{i=0}^{\left\lfloor\frac{n-1}{2}\right\rfloor} (2i+1) \cdot (2i)!, \end{aligned}
其中第二行展开后是归纳证明的形式。
于是我们得到了求解的公式,时间复杂度为 $\Theta(n)$。
相关问题
求1!+3!+5!+……+n!
这是一个求阶乘和的问题。阶乘是指从1到某个正整数n的连乘积。求1!+3!+5!+……+n!的方法如下:
1. 首先,确定要计算的范围,即确定n的值。
2. 使用循环结构,从1开始递增,每次递增2,直到达到或超过n为止。
3. 在循环中,计算每个奇数的阶乘,并将其累加到一个变量中。
4. 循环结束后,得到的累加结果即为所求的阶乘和。
用函数求1!++3!+5!+……++n!
以下是用函数求1!+3!+5!+……+n!的C语言代码:
```c
#include <stdio.h>
int factorial(int n) { // 定义递归函数计算阶乘
if (n == 1) {
return 1;
} else {
return n * factorial(n - 1); }
}
int sum(int n) { // 定义递归函数计算1!+3!+5!+……+n!
if (n == 1) {
return 1;
} else if (n % 2 == 0) {
return sum(n - 1);
} else {
return factorial(n) + sum(n - 2);
}
}
int main() {
int n;
printf("请输入n的值:");
scanf("%d", &n);
printf("1!+3!+5!+……+n!的和为:%d\n", sum(n));
return 0;
}
```