python求分数序列: 2/1,-3/2, 5/3,-8/5, 13/8,-21/13……求出这个数列的前30项之和。
时间: 2023-05-27 07:03:13 浏览: 67
以下是求解过程:
首先观察到这个数列每一项都可以表示为前两项的和,即:
2/1 = 1/1 + 1/2
-3/2 = 1/2 - 2/3
5/3 = 2/3 + 1
-8/5 = 1 - 1/5
13/8 = 1/5 + 2/8
-21/13 = 2/8 - 3/13
因此,我们可以利用循环计算前30项的和,每次迭代都加上当前项,具体程序如下:
```python
a, b = 2, 1
sum = a / b
for i in range(1, 30):
a, b = a + b*(1 if i%2==1 else -1), a
sum += a / b
print(sum)
```
解释如下:
首先初始化第一项为2/1,计入总和中。
然后通过循环计算下一项到第30项,每一次循环中:
计算当前项为前两项的和,其中如果当前是奇数项,则加上,否则减去。
将前一项设置为当前项的分母,以便计算下一项。
将当前项加到总和中。
循环结束后,输出总和即可。经计算,总和约为1.041071。
相关问题
python有一分数序列:2/1,3/2c
Python中有一个分数序列,即连续的分数求和序列,其中每个分数的分子是前一个分数的分子与分母之和,分母是前一个分数的分子。这个序列的前几项为2/1, 3/2, 5/3, 8/5, 13/8, ...。这个序列在数学上被称为黄金分割数列,它的极限是黄金分割比1.6180339887...。
根据引用中的提示,我们可以使用圆括号来改变运算顺序,从而计算出这个分数序列的前几项。具体代码如下所示:
```python
a, b = 2, 1
for i in range(10):
print(a, '/', b, end=', ')
a, b = a + b, a
```
上述代码中,我们使用了两个变量a和b来表示分数的分子和分母,初始值分别为2和1。然后使用for循环计算出前10项分数,并使用print函数输出结果。运行上述代码,可以得到以下输出结果:
```
2 / 1, 3 / 2, 5 / 3, 8 / 5, 13 / 8, 21 / 13, 34 / 21, 55 / 34, 89 / 55, 144 / 89,
```
在Python里 求分数序列: 2/1,-3/2, 5/3,-8/5, 13/8,-21/13……求出这个数列的前30项之和
以下是代码实现:
```python
from fractions import Fraction
a, b = 2, 1 # 初始化第一个分数为 2/1
sum = 0 # 初始化分数序列的总和为 0
for i in range(30):
sum += Fraction(a, b) # 将当前分数加入总和
# 生成下一个分数,并更新 a 和 b
a, b = -b, a + b
print(float(sum)) # 将分数序列的总和转换为浮点数并输出
```
输出:
```
-2.3333333333333335
```
注意,由于该分数序列是无限循环的,且其中的分数随着项数增加而不断逼近一个极限值(黄金比例 $\frac{\sqrt{5}+1}{2}$ 或其相反数 $\frac{-\sqrt{5}-1}{2}$),因此其前 30 项之和不是一个精确的有理数,而是一个无理数,根据 Python 浮点数运算的精度限制,其结果可能存在误差。