python入门学习——6种方法求n的阶乘(8种写法)

这篇具有很好参考价值的文章主要介绍了python入门学习——6种方法求n的阶乘(8种写法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、阶乘(factorial)

自然数n!(n的阶乘)是指从1、2……(n-1)、n这n个数的连乘积,即
n!=n×(n-1)×……2×1

如:
1! = 1 =1
2!= 2 * 1 = 2
3!= 3 * 2 * 1 = 6
4! = 4 * 3 * 2 * 1 = 24
5!= 5 * 4 * 3 * 2 * 1 = 120

了解了阶乘的基本概念之后,构思时间…,之后我们一起来编程实现一下(递归方法会着重讲解):

二、编程求解
1、普通的for循环语句来计算阶乘
 #函数实现
 def factorial(num):
    a=1
    #for循环遍历
    for i in range(1,num+1):
         a*=i
    return a

 n = int(input())
 print(factorial(n))

python入门学习——6种方法求n的阶乘(8种写法)

2、while循环语句来计算阶乘
#输入n的值
n=int(input())            
ans=n
i=1
if n ==0:
    print(1)
else:
	#while循环
    while i <n:                                              
        ans=ans*i                                            
        i=i+1                                               
    print(ans)        
 

python入门学习——6种方法求n的阶乘(8种写法)

3、使用递归函数

我们小时候或多或少应该听说这个故事:“从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事:从前有座山,山里有座庙……”,长大之后,仔细想想,怎么兜兜转转,这不是在"套娃"儿吗?
python入门学习——6种方法求n的阶乘(8种写法)
仔细想想,这些好像跟递归有点儿像啊,“自己调用自己”
简单了解了递归之后,我们可以去用递归写一下试试,写法如下:

1️⃣写法一

#函数实现
def factorial(n):
    if n==0:
        return 1
    else:
        #递归调用
        return factorial(n-1)*n
    
n = int(input())
print(factorial(n))

python入门学习——6种方法求n的阶乘(8种写法)

2️⃣写法二

#函数实现
def factorial(n):
      #三元运算表达式
      return 1 if n < 2 else n * factorial(n - 1)
 
#输入n的值
n = int(input())
print(factorial(n))

【注:三元运算表达式,语法:为真时的结果 if 判定条件 else 为假时的结果】

python入门学习——6种方法求n的阶乘(8种写法)

python入门学习——6种方法求n的阶乘(8种写法)
震惊我汪一整年,还能这样写?请看下图:
以用递归的方法求5的阶乘为例:

python入门学习——6种方法求n的阶乘(8种写法)
看完这张图有没有感觉对递归认识清晰了一些?当然如仍有困惑,可评论回复,博主看到后会尽快做出答复。

4、借助functools中的reduce模块

1️⃣写法一

#导入functools
import functools
#输入n的值
n = int(input())
#lambda函数+reduce模块
result = (lambda k: functools.reduce(int.__mul__, range(1, k + 1), 1))(n)
print(result)

【 注:Lambda是一种不需要名字(即标识符)、由一个单独表达式成的匿名内联函数,表达式会在调用时被求值。
创建 lambda 函数的语法为:lambda [parameters]: expression 】

python入门学习——6种方法求n的阶乘(8种写法)

2️⃣写法二

#从functools中导入reduce
from functools import reduce
#函数实现
def factorial(num):
    return reduce(lambda x,y:x*y,range(1,num+1))

#输入n的值
n = int(input())
print(factorial(n))

python入门学习——6种方法求n的阶乘(8种写法)

5、借助math库,使用math库的factorial方法
#导入math模块
import math
#函数实现
def fact(num):
	#借助math模块中的factorial方法
    return math.factorial(num)

#输入n的值
n = int(input())
print(fact(n))

【注:Python math.factorial(x) 方法返回 x 的阶乘。】

python入门学习——6种方法求n的阶乘(8种写法)

6、使用eval适配表达式
#函数实现
def fact(num):
	#eval适配表达式实现
	return eval('*'.join(map(str,range(1,num+1))))

#输入n的值
n = int(input())
print(fact(n))

【注:eval() 函数用来执行一个字符串表达式,并返回表达式的值。
eval() 方法的语法:eval(expression[, globals[, locals]]) 】

python入门学习——6种方法求n的阶乘(8种写法)

Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果对大家有帮助的话,希望大家能多多点赞+关注!这样我动力会更足哦! ღ( ´・ᴗ・` )比心文章来源地址https://www.toymoban.com/news/detail-412508.html

到了这里,关于python入门学习——6种方法求n的阶乘(8种写法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA数组元素反转的三种写法------JAVA入门基础教程

    int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67}; for(int i = 0;i arr.length/2;i++) {     int temp = arr[i];     arr[i] = arr[arr.length - 1 - i];     arr[arr.length - 1 - i] = temp; } for(int i = 0;i arr.length;i++) {     System.out.print(arr[i] + \\\"t\\\"); } System.out.println(); //互换方法2 int[] newArr = new int[arr.length]; for(int i = arr.l

    2023年04月17日
    浏览(45)
  • 【postgresql 基础入门】分组查询 group by 子句的写法,分组条件过滤having子句的写法,多列的分组以及与join联合的多表分组

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 本文主要分享在postgresql 数据库中对查询结果进行分组group by,以及对分组进行条件过滤having,同时对它

    2024年04月11日
    浏览(50)
  • python的命令行写法

    转自个人博客:python的命令行写法 - Tron \\\' blog python自带模块sys有一个获取命令行参数的功能 argv为从命令行获取的被当做一个可以迭代的属性 argv[0]为当前执行python的文件名,向依次递增 高级命令行写法: argparse demo1: 上述例子为获取-v参数 如果-v参数不存在,则打印出Fals

    2023年04月26日
    浏览(62)
  • python装13的一些写法

    1. any(** in ** for ** in **) 判断某个集合元素,是否包含某个/某些元素 代码: 输出结果 2. SQL装13的一些写法-CSDN博客

    2024年02月07日
    浏览(55)
  • vue3组合式写法在方法中出发点击事件

    问: 用vue3组合式写法,如何在一个方法中调用a标签的点击事件 回答: 在Vue 3的组合式API中,可以通过ref来获取DOM元素的引用,然后使用$el属性访问DOM元素并触发其点击事件。下面是示例代码: 在上述代码中,首先通过ref创建了一个名为linkRef的引用变量,并将其初始化为

    2024年02月15日
    浏览(51)
  • python中swith-case,python的case写法

    大家好,小编来为大家解答以下问题,python中swith-case,python的case写法,今天让我们一起来看看吧! Python 3.10版本 更新了类似其他语言的switch case结构,所以最好的方法是直接更新到python3.10,直接使用match case 语句: C语言: Python: 更详细的介绍: 【Python】Python 3.10 新特性之

    2024年02月19日
    浏览(29)
  • python多线程中一种错误的写法

    直接先上错误代码: 这个代码的问题是: multiprocessing.Pool 使用 pickle 来序列化和反序列化函数和参数,以便在多个进程之间传递。在这个错误代码中, process_function 函数被定义在 first_way 函数内部,这可能导致 pickle 出现问题,因为它无法序列化局部函数。 要解决这个问题,

    2024年02月05日
    浏览(47)
  • python带参数装饰器的两种写法

    装饰器是 Python 中非常有用的语法特性,可以用于包装或者修改函数的行为。有时候我们希望给装饰器添加参数,以便于在装饰器内部使用,那么这时候就需要使用带参数的装饰器。常用的两种带参数装饰器的写法如下: 在装饰器函数外层再套一个函数,用来接收和处理装饰

    2024年02月13日
    浏览(36)
  • 【Python学习篇】Python基础入门学习——你好Python(一)

     个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导航: 妄北y系列专栏导航:   C/C++的

    2024年03月09日
    浏览(55)
  • Python 实现单例模式的五种写法!

    单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包