習題:編寫函數,接收一個整數t作為參數,列印楊輝三角形的前t行。
簡介:
楊輝三角,是中國古代數學的接觸研究成果之一,他把二項式係數圖形化,把組合數內在的一些代數性質直觀地從圖形中體現出來,是一種離散型的數與形的結合。楊輝三角具有許多規律(想了解多一點的請問度娘~),但這道題我們需要知道的是以下幾個規律:
0.每行端點與結尾的數為1;
1.每個數等於它上方兩數之和;
2.第n項的數字有n項,第n行數字之和為2n-1;
3.第n行的m個數可表示為 C(n-1,m-1),即為從n-1個不同元素中取m-1個元素的組合數;
4.第n行的第m個數和第n-m+1個數相等 ,為組合數性質之一。
5.每個數字等於上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角。即第n+1行的第i個數等於第n行的第i-1個數和第i個數之和,這也是組合數的性質之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
6. (a+b)n的展開式中的各項係數依次對應楊輝三角的第(n+1)行中的每一項。
性質0為規律前提,性質3和性質5是楊輝三角的基本性質。
習題分析:
#把每一行看作一個list,試寫一個 generator,不斷輸出下一行的list。
對於每一行,list 的第一個元素和最後一個元素是不變的。如果用空列表L = [] 表示的話, L[0], L[n],是 不變的,
第一步:先找規律,抽象化問題:
首先可以觀察到,第一行為[1],我們直接賦給一個變量:初始化數列 p = [1]
其次我們觀察到,下面的每一行的開頭結尾都是[1],那麼我們可以推導出每一行的規律為:[1]+.........+[1]
那麼我們發現,從第三行開始中間的 [2],第四行中間的 [3,3],第五行中間的 [4,6,4] 等等以此類推才是我們需要推導的部分
第一行:[1] 設 p = [1]
第二行:[1]+[1] 設 p = [1,1]
第三行:[1]+[2]+[1] 設 p = [1,2,1]
第四行:[1]+[3]+[3]+[1]設 p = [1,3,3,1]
經過找規律,可以發現,每一個新的list中間的部分,都等於上一行list的:第0個元素+第1個元素,第1個元素+第2個元素,第2個元素+第3個元素,.......
加上頭尾也就是[1] +[p[0]+p[1]]+[p[1]+p[2]].....+[1]
比如上面第三行:p[0] = 1, p[1] = 2, p[3] = [1]
那麼第四行就是:[1] + [1+2] # p[0]+p[1]+ [2+1]# p[2]+p[3]+ [1]
後面以此類推
既然核心點是這個除去首位兩個 [1] 的中間部分:[p[0] + p[1]]+[p[1] + p[2]]+[p[2] + p[3]]........
我們很容易得到規律:[p[i] + p[i+1]]# for i in range(x)
理解性較好,代碼量較少的實現方式如下:
附編程(自己打字才能練編程哦):
def yanghui(t):
#列印第一行和第二行
print ([1])
line = [1,1]
print(line)
#列印從第三行開始的其他行
for i in range(2,t):
r = []
#按規律生成該行除兩端以外的數字
for i in range(0,len(line)-1):
r.append(line[i]+line[i+1])
#把兩端的數字連上
line = [1]+r+[1]
print(line)
#測試,列印楊輝三角形的前6行
yanghui(6)