高仿模拟练习,完整编写程序并运行出结果,答案点击按钮展开
data.txt 每行一个正整数 n(可能有多个)。对每行: ① 用 递归 函数 fact(n) 求 n!; ② 输出 fact(n); ③ 再输出 1! ~ n! 的累加和。 不允许使用循环求阶乘的写法(必须用递归)。
# data.txt 示例:
# 5
# 3
# 10
def fact(n):
# 请在此处完成递归函数(若 n<=1 返回 1,否则返回 n*fact(n-1))
with open("data.txt") as f:
for line in f:
s = line.strip()
if not s:
continue
n = int(s)
# 请在下面编写完整程序:填 fact 递归体,并输出 fact(n);输出 1!+2!+...+n!
def fact(n):
if n <= 1:
return 1
return n * fact(n - 1)
with open("data.txt") as f:
for line in f:
s = line.strip()
if not s:
continue
n = int(s)
print(fact(n))
total = 0
for i in range(1, n + 1):
total += fact(i)
print(total)
阶乘递归终止条件 n<=1 返回 1;否则 n*fact(n-1) 把问题分解成 n-1 规模。
5!=120,1!+..+5!=1+2+6+24+120=153;3!=6,1..+3!=9;10!=3628800,累计和更大。
必须写递归,用 for i in range(2,n+1): acc*=i 算 fact 会被判写法错误。