1. 程式人生 > >python3 實現 楊輝三角

python3 實現 楊輝三角

src 組合 楊輝三角 不同 tex 合數 三角形 itl enter

楊輝三角,是二項式系數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年

概述

前提:每行端點與結尾的數為1.
  1. 每個數等於它上方兩數之和。
  2. 每行數字左右對稱,由1開始逐漸變大。
  3. 第n行的數字有n項。
  4. 第n行數字和為2n-1。
  5. 第n行的m個數可表示為 C(n-1,m-1),即為從n-1個不同元素中取m-1個元素的組合數。
  6. 第n行的第m個數和第n-m+1個數相等 ,為組合數性質之一。
  7. 每個數字等於上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角。即第n+1行的第i個數等於第n行的第i-1個數和第i個數之和,這也是組合數的性質之一。即 C(n+1,i)=C(n,i)+C(n,i-1)
  8. (a+b)n的展開式中的各項系數依次對應楊輝三角的第(n+1)行中的每一項。
  9. 將第2n+1行第1個數,跟第2n+2行第3個數、第2n+3行第5個數……連成一線,這些數的和是第4n+1個斐波那契數;將第2n行第2個數(n>1),跟第2n-1行第4個數、第2n-2行第6個數……這些數之和是第4n-2個斐波那契數。
  10. 將各行數字相排列,可得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。

  

#!/usr/local/sbin/python3
# -*- coding: utf-8 -*-

from functools import reduce


def row(x):
    return  .join(list(map(str,reduce(lambda x,y:list(map(sum,zip([0]+x,x+[0]))),range(x),[1]))))



def pascal(x):
    return \n.join(row(i).center(len(row(x-1))) for i in range(x))


print(pascal(10))

  實現效果如下:

  技術分享

python3 實現 楊輝三角