编写一个子函数求一个分数序列:2/1, 3/2,5/3,8/5,13/8,21/13,…求出这个数列前20项之和。在主函数中计算结果
时间: 2023-05-27 20:05:07 浏览: 81
思路:可以利用斐波那契数列的规律,分子是斐波那契数列的后一项,分母是斐波那契数列的当前项。
代码:
```python
def fibonacci_fraction(n):
a, b = 2, 1
sum = 0
for i in range(n):
sum += a / b
a, b = a + b, a
return sum
result = fibonacci_fraction(20)
print(result)
```
输出:
```python
32.66026079864164
```
相关问题
c语言编写子函数fun求一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...的前n项之和,要求打印出每一个分数列项
以下是C语言编写的子函数fun求一分数序列的前n项之和,并打印出每一个分数列项的代码:
```c
#include <stdio.h>
float fun(int n)
{
float sum = 0.0, a = 2.0, b = 1.0, c;
int i;
for (i = 1; i <= n; i++)
{
sum += a / b;
c = a + b;
b = a;
a = c;
printf("%.0f/%.0f ", a, b); // 打印出每一个分数列项
}
return sum;
}
int main()
{
int n = 20;
printf("前%d项之和为:%.2f\n", n, fun(n));
return 0;
}
```
运行结果如下:
```
3/2 5/3 8/5 13/8 21/13 34/21 55/34 89/55 144/89 233/144 377/233 610/377 987/610 1597/987 2584/1597 4181/2584 6765/4181 10946/6765 17711/10946 28657/17711 前20项之和为:32.66
```
有一个分数序列: 2/1, 3/2,5/3,8/5,13/8,…… 用数组来表示这个序列,编写子函数并用指针做形参实现:求这个序列的前 20 项之和。在主函数中将和显示出来。
这个分数序列实际上是著名的斐波那契数列(Fibonacci sequence)的倒数形式,其中每个分数的分子是前两个分数的和,分母是当前的位置(从1开始)。我们可以创建一个数组来存储分数,然后用递归的方式生成序列。下面是一个C++的例子,展示了如何实现这个功能,使用指针作为参数传递数组:
```cpp
#include <iostream>
#include <vector>
// 定义一个辅助函数,计算下一个分数并添加到数组中
void add_next_fraction(double* arr, int& index, double* &sum) {
if (index >= 20) return; // 如果已经达到20项,停止
double current = (arr[index - 1] + arr[index - 2]) / static_cast<double>(index);
arr[index++] = current; // 更新数组
*sum += current; // 累加总和
}
// 主函数,调用辅助函数求和并输出结果
int main() {
std::vector<double> fractions(21, 0); // 创建一个大小为21的数组,用于存储前20项分数
double sum = 0; // 存储总和
fractions[0] = 1.0; // 初始化第一项为1
fractions[1] = 1.0; // 第二项也为1,因为后续分数都是这两项的比值
// 递归生成并累加分数
for (int i = 2; i < 21; i++) {
add_next_fraction(&fractions[0], i, &sum);
}
std::cout << "Sum of the first 20 fractions in the Fibonacci sequence is: " << sum << std::endl;
return 0;
}
```
在这个程序中,`add_next_fraction` 函数负责递归地生成分数,将它们添加到数组中,并累计总和。在主函数里,我们先初始化前两项为1,然后通过循环调用这个函数直到达到20项为止。最后,我们会打印出这20项分数的总和。
阅读全文