Python⽤六种⽅法实现n的阶乘
⾸先从数学的定义原理上分析,n!的数学定义有两种:
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于1808年发明的运算符号,是。⼀个的阶乘(factorial)是所有⼩于及等于该数的正整数的积,并且0的阶乘为1。n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表⽰法。
亦即n!=1×2×3×...×n。阶乘亦可以递归⽅式定义:0!=1,n!=(n-1)!×n。
--> 这⾥就有了两种解法:1、是从 1 ⼀直乘到 n ;2、0!=1,n!=(n-1)!×n 这是⼀种递归的定义,亦可以⽤递归函数来实现。
最简单的实现⽅法,即使⽤python⾃带的math模块⾥的factorial⽅法:
def Func3(n):
from math import factorial
if n >= 0: return factorial(n)
else: print('出错')
# 整数的阶乘(英语:factorial)是所有⼩于及等于该数的正整数的积,0的阶乘为1。即:n!=1×2×3×...×n。所以这⾥可以直接使⽤factorial⽅法算出n 的阶乘。
使⽤定义0!= 1;n!= (n - 1)!* n来计算,这⾥很容易想到递归函数:
def Func0(n):
if n == 0: return 1
elif n >= 1: return n * Func0(n - 1)
else: print('出错')
def Func1(n):
_list = []
while True:
if n > 0:
_list.append(n)
n -= 1
elif n == 0:
_list.append(1)
while len(_list) > 1:
x_nub = _list[-1] * _list[-2]
del _list[-1]
del _list[-1]
_list.append(x_nub)
return _list[0]
else: print('出错'); break
然后使⽤定义n!= 1*2*3*……*n,来计算:
def Func2(n):
c语言用递归函数求n的阶乘mul = lambda a, b: a * b
from functools import reduce
if n > 1: return reduce(mul, range(1, n + 1))
if n == 1 or n == 0: return 1
else: print('出错')
def Func4(n):
if n >= 1: return eval("*".join([str(i) for i in range(1, n + 1)]))
elif n == 0: return 1
else: print('出错')
def Func5(n):
if n in (0,1): return 1
elif n > 1:
in_num = n
while n > 1:
n -= 1
in_num *= n
return in_num
else: print('出错')
# Func2函数⽐较好理解,实现原理就是计算1*2*3*……*n,先计算1*2得到2,再⽤前⾯的得数乘后的 3 得到新的得数,反复到 n。这⾥的reduce函数就是实现这个操作的⾼阶函数。匿名函数 mul 实现两个数相乘,返回值作为结果。
# Func4函数,其思路是 n!相当于 1*2*3*……*n 这个式⼦,把它先完整的写下来,再交给python处理这个式⼦,eval函数⾥⾯的表达式就是⽤来输出1*2*3*……*n这样⼀个字符串的,eval函数则⽤来运⾏字符串⾥⾯的内容。
@ 它们俩的区别就在于Fac2是把多个项相乘变成了两个两个相乘,其中的reduce函数就有⼀种递归的思想;Fac4则是把多个项组成的式⼦全写了出来,然后⼀起交给程序做乘法。
# Func5是⽤while来求解的
当然 python 计算 n!的⽅法远远不⽌这么⼏种,这⾥主要提供⼀个思考⽅向供读者参考。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。