1.问题描述
计算下列多项式的值:
2.问题分析
方法一:把上面多项式中的每一个分项标上记号,第一个式子的记号为
1,第二个式子的记号为2,第三个式子的记号为3,以此类推。可以发现式子
的分母与记号之间的关系如表4.2所示。
表4.2 分母与记号间的关系
通过表4.2可以发现,每一项分式的分母都是对应项标记的阶乘。所以只
要求出每一项的阶乘再将其倒数和加在一起即为所求多项式的结果。
方法二:整体去看每一个分式之间的联系,每一个分式用一个字母来代
替,第一个分式用t1表示,第二个分式用t2表示,以此类推,如表4.3所示。
表4.3 分式间的联系
由表4.3可以看出,后面一项等于前一项乘以当前项数的倒数,如果这里
的每一项都用同一个变量t表示,那么第i项就可以用公式表示为t=t*1/i。这样
可以只用一层循环来实现,循环变量i控制对应的项数,取值范围为1~n。
3.算法分析
n的阶乘算法为:n!=1×2×3×4×5×…×n,可用循环来实现。代码如下:
t = 1 # t记录每一项分式的分母,每次循环之前给t赋初值 j = 1 while j <= i: t = t * j # 每一项的阶乘 j += 1
对于每一项都是求出其分母即项数i对应的阶乘,是一个循环重复的过
程,故可用另外一层循环来控制项数,范围为1~n。代码如下:
i = 1 while i <= n: # i控制对应的项数 …
对于存储阶乘的变量t,每一次记录新的阶乘之前都要把其值赋为1,否
则下一项的阶乘值会受上一项的影响,所以在每次执行内层循环求下一项阶
乘之前,要把t的值再次赋为1。
方法二的算法分析此处省略,后面将给出相关程序。
4.确定程序框架
程序流程图如图4.6所示。
5.完整的程序
方法1:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 多项式之和
if __name__ == "__main__":
n = int(input("请输入一个整数n: "))
s = 0 # s记录多项式的和
i = 1
while i <= n: # i控制对应的项数
t = 1 # t记录每一项分式的分母,每次循环之前给t赋初值
j = 1
while j <= i:
t = t * j # 每一项的阶乘
j += 1
s = s + 1/t
i += 1
print("%f" %s)
方法2:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 多项式之和
if __name__ == "__main__":
s = 0 # s记录多项式的和
n = int(input("请输入一个整数n: "))
t = 1
for i in range(1, n+1): # i<=n,i控制对应的项数
t = t*1/i #将分式的值赋给变量t
s = s + t
print("%f" %s)
6.运行结果
在PyCharm下运行程序,屏幕上提示“请输入一个整数n:”,这里输入50,
运行结果如图4.7所示。



