用递归实现求 1+1/2+1/3+1/4+……1/n 的值
时间: 2023-11-12 17:06:29 浏览: 255
可以使用递归算法来计算 1+1/2+1/3+1/4+……1/n 的值。递归算法的思路是:当 n=1 时,返回 1;否则,返回 1/n 加上递归调用 sum_recursive(n-1) 的结果。下面是一个 C 语言的例子:
```
double sum_recursive(int n) {
if (n == 1) {
return 1.0;
} else {
return 1.0/n + sum_recursive(n-1);
}
}
```
调用 sum_recursive(n) 即可得到 1+1/2+1/3+1/4+……1/n 的值。需要注意的是,递归算法的效率不如循环算法高,因为递归调用会产生额外的函数调用开销。如果 n 很大,递归算法可能会导致栈溢出。因此,在实际应用中,应该优先考虑使用循环算法。
相关问题
编写一个递归函数,计算1+1/2+1/3+……+1/n
以下是 Python 代码实现:
```python
def sum_recursion(n):
if n == 1:
return 1
else:
return 1/n + sum_recursion(n-1)
n = 5
print(sum_recursion(n)) # 输出:2.283333333333333
```
这个递归函数的思路是:先判断输入的参数n是否等于1,如果是,则返回1;如果不是,则递归调用sum_recursion(n-1),并将结果加上1/n返回。
例如,当n=5时,函数先计算1/5,然后递归调用sum_recursion(4),计算1/4,以此类推,直到n=1时,返回1。最后将所有结果相加,即得到1+1/2+1/3+1/4+1/5=2.283333333333333。
1+1/(1+2)+1/(1+2+3)+1/(1+2+3+4)+……+1/(1+2+3+4+……+n)
题目要求计算级数1/(1*2*3*...*n),其中n为输入的通项数。可以使用递归或循环来计算这个级数。
递归算法:
```c
#include <stdio.h>
double calcSeries(int n) {
if (n == 1)
return 1.0;
else
return calcSeries(n - 1) / n;
}
int main() {
int n;
scanf("%d", &n);
printf("%lf", calcSeries(n));
return 0;
}
```
循环算法:
```c
#include <stdio.h>
int main() {
int n;
double sum = 0.0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
double term = 1.0;
for (int j = 1; j <= i; j++) {
term *= j;
}
sum += 1.0 / term;
}
printf("%lf", sum);
return 0;
}
```
阅读全文