日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现杨辉三角形博客园_Python实现杨辉三角

發布時間:2024/7/23 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现杨辉三角形博客园_Python实现杨辉三角 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

楊輝三角,是二項式系數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。楊輝三角是中國古代數學的杰出研究成果之一,它把二項式系數圖形化,把組合數內在的一些代數性質直觀地從圖形中體現出來,是一種離散型的數與形的結合。

以下是楊輝三角的大概樣子,n=5

昨天一直在看傳智播客2018年的前端教程,昨天和今天也抽空研究了以下如何用Python實現楊輝三角。

楊輝三角有以下幾點特性:

前提:每行端點與結尾的數為1.

每個數等于它上方兩數之和。

每行數字左右對稱,由1開始逐漸變大。

第n行的數字有n項。

第n行數字和為2n-1。

第n行的m個數可表示為 C(n-1,m-1),即為從n-1個不同元素中取m-1個元素的組合數。

第n行的第m個數和第n-m+1個數相等 ,為組合數性質之一。

每個數字等于上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角。即第n+1行的第i個數等于第n行的第i-1個數和第i個數之和,這也是組合數的性質之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。

(a+b)n的展開式中的各項系數依次對應楊輝三角的第(n+1)行中的每一項。

將第2n+1行第1個數,跟第2n+2行第3個數、第2n+3行第5個數……連成一線,這些數的和是第4n+1個斐波那契數;將第2n行第2個數(n>1),跟第2n-1行第4個數、第2n-2行第6個數……這些數之和是第4n-2個斐波那契數。

將各行數字相排列,可得11的n-1(n為行數)次方:1=11^0; 11=11^1; 121=11^2……當n>5時會不符合這一條性質,此時應把第n行的最右面的數字"1"放在個位,然后把左面的一個數字的個位對齊到十位... ...,以此類推,把空位用“0”補齊,然后把所有的數加起來,得到的數正好是11的n-1次方。以n=11為例,第十一行的數為:1,10,45,120,210,252,210,120,45,10,1,結果為 25937424601=1110。

本來無從下手,但是研究了一種Python解法終于實現:

def YangHui():

a = [1]

while True:

yield a

a = [sum(i) for i in zip([0] + a, a + [0])]

n = 0

for j in YangHui():

print(j)

n += 1

if n == 2:

break

下面,我來解釋以下這段代碼是什么意思:

首先,定義一個函數,然后定義一個列表,a = [1]

然后就是while循環,yield生成器就不多說了。下面的其實也不用多說,主要是這句話:

a = [sum(i) for i in zip([0] + a, a + [0])]

大家知道,sum是計算符號,而zip是打包列表的用法。但是我看了很久看不懂什么意思,直到我一步步推演:

a = [1]

a = [0,1]+[1,0] = [1,1]

a = [0,1,1]+[1,1,0]==[1,2,1]

a = [0,1,2,1]+[1,2,1,0]=[1,3,3,1]

a = [0,1,3,3,1]+[1,3,3,1,0]=[1,4,6,4,1]

這種解法非常巧妙,他利用zip打包兩個數組,再利用2個0,錯位相加,從而實現了楊輝三角,解題者非常聰明,而我卻很笨,看了很久才明白。

總結

以上是生活随笔為你收集整理的python实现杨辉三角形博客园_Python实现杨辉三角的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。