阶乘–>>数学用n! = n*(n-1)(n-2)(n-3)…321,0的阶乘也是1,本人无法演绎,只能简单的从1开始
第一种:推导式+循环遍历列表内每个元素相乘
def factorial(n):
li =[i for i in range(1,n+1)] #li = [1,2,3,4] 推导式,形成一个列表,从1开始至n+1结束(左闭右开,n须+1)
a = 1 # a = 1开始计算,如果从0开始,0×任何整数都为0,对此题无太大意义
for i in li: # 遍历列表内元素,循环需要遍历完才会进行下一步
a = a *i # =左边的a为右边相乘的赋值,第一次=右边为1*1 则a =1,第二次=右边为1*2则=左边a=2,第三次=右边为2*3则=左边a=6,.......
return a
print(factorial(4))
第二种:调用functools模块reduce的累计算
from functools import reduce #reduce 累计算,格式为reduce(函数,序列)序列:array 列表、元组、字典
def factorial(n):
li = [i for i in range(1,n+1)] #同第一种推导式,形成列表
return reduce((lambda x,y:x*y),li) # 匿名函数lambda
print(factorial(4))
第三种:递归
def factorial(n):
if n <=1:
return 1
return n*factorial(n-1)
print(factorial(5))
第四种:模块numpy中的prod
#Python学习交流群:531509025
import numpy
def func(n):
Array = [i for i in range(1,n+1)]
return numpy.prod(Array)
print(func(1))