阶乘-->>数学用n! = n*(n-1)*(n-2)*(n-3)*....*3*2*1,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
import numpy def func(n): Array = [i for i in range(1,n+1)] return numpy.prod(Array) print(func(1))