@追远·J 答案不错了,写一个递归的方案。
LEVEL 1: 递归
def fac1(n):
if n == 0 or n == 1:
return 1
else:
return n * fac1(n - 1)
print(fac1(50))
LEVEL 2:尾递归
当然,更合理的是使用尾递归。
def fac2(n, acc=1):
if n == 0 or n == 1:
return acc
else:
return fac2(n - 1, acc * n)
print(fac2(50, 1))
LEVEL 3:无穷系列--生成器
更加高级的使用生成器的方式,以下代码是打印1~50的所有阶乘,事实上`fac_generator`是一个储存在有限的内存空间的一个无穷序列,里面包含从1到正无穷的所有数的阶乘,这是该实现的好处。
def fac3(n=1):
fac_value = 1
while True:
fac_value *= n
yield fac_value
n += 1
fac_generator3 = fac3()
print([next(fac_generator3) for _ in range(50)])
这种方案的好处是可以做一些惰性运算,我们可以把这个无穷系列里的每个元素乘以2,但不输出出来,需要时再用next取出。</