完整源代码项目地址,关注博主私信'源代码'后可获取
1.问题描述
计算下列多项式的值:
2.问题分析
方法一:把上面多项式中的每一个分项标上记号,第一个式子的记号为1,第二个式子的记号为2,第三个式子的记号为3,以此类推。可以发现式子的分母与记号之间的关系如表所示。
通过上表可以发现,每一项分式的分母都是对应项标记的阶乘。所以只要求出每一项的阶乘再将其倒数和加在一起即为所求多项式的结果。
方法二:整体去看每一个分式之间的联系,每一个分式用一个字母来代替,第一个分式用t1表示,第二个分式用t2表示,以此类推,如表所示。
由上表可以看出,后面一项等于前一项乘以当前项数的倒数,如果这里的每一项都用同一个变量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.确定程序框架
程序流程图如图所示。
5.完整的程序
方法1:
# 多项式之和
if __name__ == "__main__":
n = int(input("请输入一个整数n: "))
print(f'输入的整数是{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)
输入的整数是50
1.718282
方法2:
# 多项式之和
if __name__ == "__main__":
s = 0 # s记录多项式的和
n = int(input("请输入一个整数n: "))
print(f'输入的整数是{n}')
t = 1
for i in range(1, n+1): # i<=n,i控制对应的项数
t = t*1/i #将分式的值赋给变量t
s = s + t
print("%f" %s)
输入的整数是50
1.718282