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

# Func0函数用了递归函数,Func1函数则解释了递归函数内部方法,详细见& https://blog.csdn.net/peipei12138/article/details/88927527

 

然后使用定义n!= 1*2*3*……*n,来计算:

def Func2(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!的方法远远不止这么几种,这里主要提供一个思考方向供读者参考。

  • 8
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是Python使用while循环实现n阶乘的代码: ``` n = int(input("请输入一个正整数:")) result = 1 while n > : result *= n n -= 1 print(result) ``` 解释: 1. 首先,我们通过 `input()` 函数获取用户输入的一个正整数,使用 `int()` 函数将其转换为整数类型,并将其赋值给变量 `n`。 2. 然后,我们定义一个变量 `result`,用于存储阶乘的结果,初始值为 1。 3. 接着,我们使用 `while` 循环来计算阶乘。每次循环,我们将 `n` 乘以 `result`,并将结果赋值给 `result`。然后,我们将 `n` 减 1,以便下一次循环计算下一个数的阶乘。 4. 当 `n` 的值为 时,循环结束。此时,`result` 中存储的就是输入的正整数的阶乘。 5. 最后,我们使用 `print()` 函数将结果输出到屏幕上。 ### 回答2: 在Python中,可以使用循环语句来实现n阶乘计算。其中,while循环是一种较为常用的循环方式,可以用来反复执行某一代码块,直到满足终止条件为止。 实现n阶乘的基本思路是:用一个变量i来记录当前的乘数,然后使用while循环进行迭代,每次将乘数与结果相乘,直到乘数达到n。代码实现如下: ``` n = int(input("请输入阶乘数n:")) i = 1 result = 1 while i <= n: result = result * i i = i + 1 print(n,"的阶乘为:",result) ``` 在上述代码中,首先使用`input()`函数让用户输入阶乘数n。然后,通过设置变量i和结果result的初始值为1,来保证乘积正确计算。接着,使用while循环,当i小于或等于n时,执行循环体内的代码块。在循环体中,将当前的乘数i与结果result相乘,并将结果赋值给result。随后,将变量i的值加1,进入下一次循环迭代,直到i达到n时,while循环终止。最后,使用`print()`函数输出计算结果。 需要注意的是,如果输入的阶乘数为负数或非整数,将会导致程序异常。因此,在实际开发中,应该添加异常处理代码,对错误输入进行处理。 总之,Python使用while循环实现n阶乘非常简单,只需要掌握基本的循环语句和乘法运算即可。 ### 回答3: 阶乘是数学中常见的概念,指某个正整数n以及所有小于等于n的正整数的积。例如,5的阶乘就是1*2*3*4*5=120。在Python中,可以使用while循环来实现n阶乘。 步骤如下: 1.首先,定义一个变量result,并给定其初始值为1: result = 1 2.接着,使用while循环实现阶乘计算。while循环的条件是n大于等于1,因为阶乘只有在n大于等于1的情况下才有意义。使用while循环对result进行累乘,每次循环结束后将n的值减1,用于下次循环计算: while n >= 1: result = result * n n = n - 1 3.最后,返回计算结果: return result 完整代码如下: def factorial(n): result = 1 while n >= 1: result = result * n n = n - 1 return result 我们可以通过调用函数来验证代码是否正确,例如: print(factorial(5)) 输出结果应该为120,即5的阶乘。在实际应用中,可以通过传入不同的参数来计算不同数的阶乘,从而方便地进行计算,提高代码的复用性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值