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所示。
