由题可以得知,分子是前一个数字项的分母,分母是前两个数字项的分母之和,由此可得代码:
使用 Python 编程语言解题:
"""
存在序列:1, 1/2, 2/3, 3/5, 8/13, ... 的序列,求这个数列的前10项之和
"""
a = 1 # 分子
b = 1 # 分母
s = 0 # 数列和
for i in range(10):
s += a/b
a, b = b, a+b
print("结果是 {:.2f}".format(s)) # 结果保留小数点后两位
此处应注意:a, b = b, a+b 和 a=b , b=a+b的区别
a, b = b, a+b是先运算赋值号=左边的数值,再依次赋值给左边的数值,即:
当 a = 1,b = 2 时: b = 2 a+b = 2+1 再分别赋值给 a 和 b,即
a = 2,b = 3
而 a=b , b=a+b是依次运行赋值,即
当 a = 1,b = 2 时: a = b = 2 b = a+b = 2+2 即
a = 2,b = 4
故这是此两个赋值表达式的区别!
故其输出结果为:
使用 TypeScript 编程语言解题:
有 python 编程语言我们可以得知,此时 x 和 y 两个变量会同时赋值,故其解题步骤如下:
function sequence() {
let x = 1, y = 1;
let sequenceSum = 0;
for (let number = 0; number < 10; number++) {
sequenceSum += x / y
[x, y] = [y, x + y];
}
// 结果保留后两位小数
console.log(sequenceSum.toFixed(2))
}
sequence()
输出结果:保留两位小数,故等于6.48
使用 Go 语言进行解题:
有 python 编程语言我们可以得知,此时 x 和 y 两个变量会同时赋值,故其解题步骤如下:
package main
import (
"fmt"
"strconv"
)
func main() {
arrList()
}
func arrList() {
// 获取初始值
var x float64 = 1
var y float64 = 1
var sum float64
for i := 0; i < 10; i++ {
sum += x / y
x, y = y, x+y
}
// 保留小数点后两位
value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", sum), 64)
fmt.Println(value)
}
输出结果:保留两位小数,故等于6.48
使用 Java 语言解题
有 python 编程语言我们可以得知,此时 x 和 y 两个变量会同时赋值,由于在 java 中我不懂得如何使用类似python 语言中a, b = b, a+b 这样的赋值表达式,故采用了新的值z进行接收变化前的x,从而达到解题的目的。故其解题步骤如下:
package main;
public class test {
public static void main(String[] args) {
// 获取初始值
double x = 1; // 分子
double y = 1; // 分母
double z; // 中间缓存
double sum = 0; // 数列和
for (int number = 0; number < 10; number++) {
sum += x / y;
z = y;
y = x + y;
x = z;
}
// 保留小数点后两位
System.out.printf("%.2f%n", sum);
}
}
输出结果:保留两位小数,故等于 6.48