最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python如何巧妙實現(xiàn)數(shù)學階乘n!

 更新時間:2023年03月16日 09:41:14   作者:尤而小屋  
一個正整數(shù)的階乘(factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且0的階乘為1。自然數(shù)n的階乘寫作n!,本文就給大家介紹如何使用python和第三方庫來實現(xiàn)數(shù)學運算中的階乘以及階乘累計求和

python實現(xiàn)階乘-基礎版本

什么是階乘呢

在數(shù)學運算中n!表示n的階乘,用數(shù)學公式表示為:

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

下面提供了一個例子:比如5的階乘

#?正確的結果

1*2*3*4*5

正確結果為:120

小編給大家提供3種不同的方法來實現(xiàn)階乘運算:

  • 基于for運算的累乘
  • 基于遞歸函數(shù)實現(xiàn)
  • 基于第三方庫functools的reduce函數(shù)實現(xiàn)

方式1-累乘

result?=?1??#?給定一個初始值
n?=?5

for?i?in?range(1,?n+1):
????print("累乘前result:?",?result)
????print("循環(huán)數(shù)i的值:?",?i)
????result?=?result?*?i??#?不斷地累成result
????print("累乘后result:?",?result)
????print("------------")

result

累乘前result:  1
循環(huán)數(shù)i的值:  1
累乘后result:  1
------------
累乘前result:  1
循環(huán)數(shù)i的值:  2
累乘后result:  2
------------
累乘前result:  2
循環(huán)數(shù)i的值:  3
累乘后result:  6
------------
累乘前result:  6
循環(huán)數(shù)i的值:  4
累乘后result:  24
------------
累乘前result:  24
循環(huán)數(shù)i的值:  5
累乘后result:  120
------------

結果是:120

方式2-使用遞歸函數(shù)

def?recursion(n):
????if?n?==?0?or?n?==?1:??#?特殊情況
????????return?1
????else:
????????return?n?*?recursion(n-1)??#?遞歸函數(shù)
recursion(5)

120

方式3-第三方庫functools的reduce函數(shù)

#?在python3中reduce函數(shù)被移入到functools中;不再是內(nèi)置函數(shù)

from?functools?import?reduce?

n?=?5

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

120

reduce函數(shù)的用法解釋:

reduce(function,?iterable[,?initializer])
  • 需要給定一個待執(zhí)行的函數(shù)function(上面是匿名函數(shù);或者自定義函數(shù))
  • 給定一個可迭代對象iterable
  • 可選的初始值initializer
#?使用自定義函數(shù)

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

#?使用匿名函數(shù)

from?functools?import?reduce?

number?=?range(1,6)

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

15

python實現(xiàn)階乘累加求和-進階版

下面是一個進階的需求:如何實現(xiàn)階乘的累加求和?

#?求出下面的階乘的累加求和

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

正確結果是153

方式1-累乘+sum

#?定義累乘函數(shù)

def?func(n):
????result?=?1
????
????for?i?in?range(1,?n+1):
????????result?=?result?*?i??#?不斷地累成re
??????????
????return?result
????
func(5)??#?測試案例

120

上面是我們實現(xiàn)的單個數(shù)字的階乘,放入for循環(huán)即可求累計求和:

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

#?調(diào)用累乘函數(shù)
sum(func(i)??for?i?in?range(1,6))

153

方式2-累乘+遞歸

在一個函數(shù)中同時使用累乘和遞歸函數(shù)

#?定義累乘函數(shù)

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)??#在這里實現(xiàn)遞歸?func(n-1)
????
func(5)??

153

方式3-遞歸+sum

def?recursion(n):
????"""
????之前定義的遞歸函數(shù)
????"""
????if?n?==?0?or?n?==?1:
????????return?1
????else:
????????return?n?*?recursion(n-1)??

調(diào)用遞歸函數(shù)在基于for循環(huán)和sum求和

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

#?調(diào)用定義的遞歸函數(shù)
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

單次調(diào)用reduce函數(shù),結合for循環(huán)和sum求和

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

153

方式5-兩次reduce函數(shù)

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

[1, 2, 6, 24, 120]

將上面的結果作為可迭代的列表再次傳入reduce函數(shù),此時的執(zhí)行函數(shù)是兩個元素的求和(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如何巧妙實現(xiàn)數(shù)學階乘n!的詳細內(nèi)容,更多關于Python數(shù)學階乘n!的資料請關注腳本之家其它相關文章!

相關文章

  • Python列表數(shù)據(jù)如何按區(qū)間分組統(tǒng)計各組個數(shù)

    Python列表數(shù)據(jù)如何按區(qū)間分組統(tǒng)計各組個數(shù)

    這篇文章主要介紹了Python列表數(shù)據(jù)如何按區(qū)間分組統(tǒng)計各組個數(shù),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • PyCharm+Pipenv虛擬環(huán)境開發(fā)和依賴管理的教程詳解

    PyCharm+Pipenv虛擬環(huán)境開發(fā)和依賴管理的教程詳解

    這篇文章主要介紹了PyCharm+Pipenv虛擬環(huán)境作開發(fā)和依賴管理的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Pyqt5?Designer構建桌面應用設計及實現(xiàn)代碼

    Pyqt5?Designer構建桌面應用設計及實現(xiàn)代碼

    這篇文章主要為大家介紹了Pyqt5?Designer構建桌面應用設計及實現(xiàn)代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • python分數(shù)表示方式和寫法

    python分數(shù)表示方式和寫法

    在本篇文章里小編給大家整理的是關于python分數(shù)怎么表示的相關知識點內(nèi)容,有需要的朋友們學習下吧。
    2019-06-06
  • Python?Socket實現(xiàn)遠程木馬彈窗詳解

    Python?Socket實現(xiàn)遠程木馬彈窗詳解

    這篇文章主要介紹了Python?Socket實現(xiàn)遠程木馬彈窗詳解,Socket用來描述IP地址和端口,是通信鏈的句柄,應用程序可以通過Socket向網(wǎng)絡發(fā)送請求或者應答網(wǎng)絡請求
    2022-07-07
  • 在?Python?中創(chuàng)建DataFrame的方法

    在?Python?中創(chuàng)建DataFrame的方法

    這篇文章主要介紹了教你如何在?Python?中創(chuàng)建DataFrame,我們將學習以多種方式創(chuàng)建DataFrame,DataFrame是數(shù)據(jù)的二維集合,是一種數(shù)據(jù)結構,其中數(shù)據(jù)以表格形式存儲,更多相關資料需要的小伙伴可以參考一下
    2022-03-03
  • PyQt5+QtChart實現(xiàn)繪制極坐標圖

    PyQt5+QtChart實現(xiàn)繪制極坐標圖

    QChart是一個QGraphicScene中可以顯示的QGraphicsWidget。本文將利用QtChart實現(xiàn)極坐標圖的繪制,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-12-12
  • 使用Python實現(xiàn)嵌套繪圖并為條形圖添加自定義標注

    使用Python實現(xiàn)嵌套繪圖并為條形圖添加自定義標注

    論文繪圖時經(jīng)常需要多圖嵌套,正好最近繪圖用到了,所以這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)嵌套繪圖并為條形圖添加自定義標注,感興趣的可以了解下
    2024-02-02
  • 上手簡單,功能強大的Python爬蟲框架——feapder

    上手簡單,功能強大的Python爬蟲框架——feapder

    這篇文章主要介紹了上手簡單,功能強大的Python爬蟲框架——feapder的使用教程,幫助大家更好的利用python進行爬蟲,感興趣的朋友可以了解下
    2021-04-04
  • python爬蟲xpath模塊簡介示例代碼

    python爬蟲xpath模塊簡介示例代碼

    xpath是最常用且最便捷高效的一種解析方式,通用型強,其不僅可以用于python語言中,還可以用于其他語言中,數(shù)據(jù)解析建議首先xpath,這篇文章主要介紹了python爬蟲xpath模塊簡介,需要的朋友可以參考下
    2023-02-02

最新評論

宣武区| 崇礼县| 稻城县| 九龙县| 安福县| 宜君县| 上杭县| 炉霍县| 教育| 洪江市| 五原县| 丹寨县| 荆州市| 华池县| 开封市| 迁西县| 永嘉县| 伊川县| 普宁市| 宣汉县| 莫力| 睢宁县| 许昌县| 沅陵县| 涟源市| 安宁市| 安龙县| 广灵县| 临颍县| 许昌市| 上饶县| 五莲县| 眉山市| 望谟县| 阳西县| 大英县| 龙川县| 巩义市| 顺昌县| 巴彦淖尔市| 甘洛县|