iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Python如何巧妙实现数学阶乘n!
  • 609
分享到

详解Python如何巧妙实现数学阶乘n!

Python计算数学阶乘n!Python数学阶乘n!Python阶乘 2023-03-19 17:03:30 609人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录python实现阶乘-基础版本方式1-累乘方式2-使用递归函数方式3-第三方库functools的reduce函数Python实现阶乘累加求和-进阶版方式1-累乘+sum方式2-

python实现阶乘-基础版本

什么是阶乘呢

数学运算中n!表示n的阶乘,用数学公式表示为:

n!=1*2*3*....*(n-1)*n

下面提供了一个例子:比如5的阶乘

# 正确的结果

1*2*3*4*5

正确结果为:120

小编给大家提供3种不同的方法来实现阶乘运算:

  • 基于for运算的累乘
  • 基于递归函数实现
  • 基于第三方库functools的reduce函数实现

方式1-累乘

result = 1  # 给定一个初始值
n = 5

for i in range(1, n+1):
    print("累乘前result: ", result)
    print("循环数i的值: ", i)
    result = result * i  # 不断地累成result
    print("累乘后result: ", result)
    print("------------")

result

累乘前result:  1
循环数i的值:  1
累乘后result:  1
------------
累乘前result:  1
循环数i的值:  2
累乘后result:  2
------------
累乘前result:  2
循环数i的值:  3
累乘后result:  6
------------
累乘前result:  6
循环数i的值:  4
累乘后result:  24
------------
累乘前result:  24
循环数i的值:  5
累乘后result:  120
------------

结果是:120

方式2-使用递归函数

def recursion(n):
    if n == 0 or n == 1:  # 特殊情况
        return 1
    else:
        return n * recursion(n-1)  # 递归函数
recursion(5)

120

方式3-第三方库functools的reduce函数

# 在python3中reduce函数被移入到functools中;不再是内置函数

from functools import reduce 

n = 5

reduce(lambda x,y: x*y, range(1,n+1))  

120

reduce函数的用法解释:

reduce(function, iterable[, initializer])
  • 需要给定一个待执行的函数function(上面是匿名函数;或者自定义函数)
  • 给定一个可迭代对象iterable
  • 可选的初始值initializer
# 使用自定义函数

from functools import reduce 

number = range(1,6)
# number = [1,2,3,4,5]

def add(x,y):
    return x+y

reduce(add, number)  # 1+2+3+4+5

15

# 使用匿名函数

from functools import reduce 

number = range(1,6)

reduce(lambda x,y: x+y, number)  # 1+2+3+4+5

15

python实现阶乘累加求和-进阶版

下面是一个进阶的需求:如何实现阶乘的累加求和?

# 求出下面的阶乘的累加求和

1 + 1*2 + 1*2*3 + 1*2*3*4 + 1*2*3*4*5

正确结果是153

方式1-累乘+sum

# 定义累乘函数

def func(n):
    result = 1
    
    for i in range(1, n+1):
        result = result * i  # 不断地累成re
          
    return result
    
func(5)  # 测试案例

120

上面是我们实现的单个数字的阶乘,放入for循环即可求累计求和:

# func(1) + func(2) + func(3) +  func(4) + func(5)

# 调用累乘函数
sum(func(i)  for i in range(1,6))

153

方式2-累乘+递归

在一个函数中同时使用累乘和递归函数

# 定义累乘函数

def func(n):
    result = 1  # 定义初始值
    
    for i in range(1, n+1):
        result = result * i  # 不断地累成re
    
    # if result == 1 :  等价于下面的条件
    if n==0 or n==1:
        return 1
    else:  # 下面是关键代码
        return result + func(n-1)  #在这里实现递归 func(n-1)
    
func(5)  

153

方式3-递归+sum

def recursion(n):
    """
    之前定义的递归函数
    """
    if n == 0 or n == 1:
        return 1
    else:
        return n * recursion(n-1)  

调用递归函数在基于for循环和sum求和

# recursion(1) + recursion(2) + recursion(3) +  recursion(4) + recursion(5)

# 调用定义的递归函数
sum(recursion(i)  for i in range(1,6))

153

方式4-reduce 结合 sum

from functools import reduce 

n = 5

reduce(lambda x,y: x*y, range(1,n+1))  

120

单次调用reduce函数,结合for循环和sum求和

sum(reduce(lambda x,y: x*y, range(1,n+1)) for n in range(1,6))

153

方式5-两次reduce函数

[reduce(lambda x,y: x*y, range(1,n+1)) for n in range(1,6)]

[1, 2, 6, 24, 120]

将上面的结果作为可迭代的列表再次传入reduce函数,此时的执行函数是两个元素的求和(x+y):

reduce(lambda x,y:x+y, [reduce(lambda x,y: x*y, range(1,n+1)) for n in range(1,6)] )

153

以上就是详解Python如何巧妙实现数学阶乘n!的详细内容,更多关于Python数学阶乘n!的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解Python如何巧妙实现数学阶乘n!

本文链接: https://www.lsjlt.com/news/200096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Python如何巧妙实现数学阶乘n!
    目录python实现阶乘-基础版本方式1-累乘方式2-使用递归函数方式3-第三方库functools的reduce函数python实现阶乘累加求和-进阶版方式1-累乘+sum方式2-...
    99+
    2023-03-19
    Python计算数学阶乘n! Python数学阶乘n! Python阶乘
  • Python怎么实现数学阶乘n!
    这篇文章主要介绍了Python怎么实现数学阶乘n!的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现数学阶乘n!文章都会有所收获,下面我们一起来看看吧。python实现阶乘-基础版本什么是阶乘呢...
    99+
    2023-07-05
  • php中如何实现n阶乘
    这篇文章主要介绍了php中如何实现n阶乘,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、普通递归实现首先是普通递归实现,根据递归的通用公式 fact(n) = n * fa...
    99+
    2023-06-15
  • php如何实现n的阶乘
    这篇文章主要介绍php如何实现n的阶乘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php实现n的阶乘的方法:1、通过普通递归实现,代码如“function fact(int $n): int{...}”;2、通过普...
    99+
    2023-06-15
  • php如何用循环实现n的阶乘
    这篇文章主要介绍“php如何用循环实现n的阶乘”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何用循环实现n的阶乘”文章能帮助大家解决问题。php用循环实现n的阶乘的方法:1、新建一个php示...
    99+
    2023-07-04
  • 如何使用php递归函数实现阶乘计算
    以下是使用PHP递归函数实现阶乘计算的示例代码:```phpfunction factorial($n) {if ($n ...
    99+
    2023-09-15
    php
  • C++ 函数递归详解:递归实现阶乘和斐波那契数列
    递归是函数自我调用的编程技术,分为基线条件和递归调用。使用递归可以实现阶乘,即正整数乘以其所有较小正整数的乘积,和斐波那契数列,即每个数字是前两个数字总和的数列。 C++ 函数递归详解...
    99+
    2024-05-02
    c++ 递归
  • Python真题案例之小学算术 阶乘精确值 孪生素数 6174问题详解
    目录前言小学生算术问题描述问题分析代码实现阶乘精确值问题描述问题分析代码实现孪生素数问题描述问题分析代码实现6174问题问题描述问题分析代码实现前言 今天给大家分享一下刷到的关于数值...
    99+
    2024-04-02
  • 详解Python的整数是如何实现的
    目录楔子整数的底层实现整数是怎么存储的整数占的内存大小是怎么计算的两个整数是怎么比较大小的整数的加减法运算小结楔子 本次我想聊一聊 Python 的整数,我们知道 Python 的整...
    99+
    2024-04-02
  • Python+eval函数实现动态地计算数学表达式详解
    目录Python 的 eval()第一个参数:expression第二个参数:globals第三个参数:locals用 eval() 计算表达式布尔表达式数学表达式通用表达式Pyth...
    99+
    2024-04-02
  • 详解Python如何实现Excel数据读取和写入
    目录1. 功能分析2.系统开发环境3.安装依赖库4. 主函数设计5.模块设计1. 功能分析 1.加载文件夹内所有的Excel数据; 2.生产贡献度分析图表(以柱状图显示表格数据); ...
    99+
    2024-04-02
  • python如何实现参数解包
    这篇文章主要介绍python如何实现参数解包,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!参数解包有时称为Splat或Scatter运算符*当需要将列表/元组中的参数解压缩以进行需要单独的位置参数的函数调用时,它们会...
    99+
    2023-06-27
  • python如何实现API的调用详解
    目录前言API数据接口API的调用和数据接口的调用调用的基础-请求方法几种常见API调用实例百度AI相关API百度地图API有道APIuuidsign常用API分享总结前言 在日常工...
    99+
    2024-04-02
  • 详解Python如何实现对比两个Excel数据差异
    目录1、引言2、代码实战3、总结1、引言 小丝:鱼哥,还记得上次写的把数据库的查询结果写入到excel这个脚本不。 小鱼:嗯… 可以说不记得吗 小丝:我猜你就记得。 小...
    99+
    2022-12-08
    Python对比Excel数据差异 Python对比数据差异 Python 数据差异
  • 详解Python如何实现惰性导入-lazyimport
    目录前言写代码实现PEP0690 建议的做法其一其二前言 如果你的 Python 程序程序有大量的 import,而且启动非常慢,那么你应该尝试懒导入,本文分享一种实现惰性导入的一种...
    99+
    2024-04-02
  • hadoop详解如何实现数据排序
    目录前言MapReduce排序MapReduce排序分类1、部分排序2、全排序3、辅助排序4、二次排序自定义排序案例1、自定义一个Bean对象,实现WritableComparabl...
    99+
    2024-04-02
  • C++详解如何实现动态数组
    目录动态数组示例代码运行环境运行效果动态数组 动态数组Vector可以动态扩展内存,其采用连续的内存空间,当内存空间不足,便以原来的容量的2倍或者1.5倍成倍的扩展,将原有的数组元素...
    99+
    2024-04-02
  • python如何实现参数解压缩
    这篇文章主要介绍python如何实现参数解压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!参数解压缩有时称为Splat或Scatter运算符*的功能是:在需要将列表/元组中的参数解压缩以进行需要单独的位置参数的函数...
    99+
    2023-06-27
  • 详解Python如何实现尾递归优化
    目录一般递归与尾递归一般递归尾递归C中尾递归的优化Python开启尾递归优化一般递归与尾递归 一般递归 def normal_recursion(n): if n == 1:...
    99+
    2024-04-02
  • 如何实现Python调用Golang代码详解
    1.调用编译后的动态库文件,报头文件错误 原因: 不同平台下编译的add.so 不能通用,Windows下可以运行的so文件,linux下就不能运行,需要重新编译linux的so文件...
    99+
    2023-05-20
    Python调用golang方法 Python调用golang代码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作