楊輝三角形,又稱賈憲三角形、帕斯卡三角形,是二項式系數(shù)在三角形中的一種幾何排列。
下圖顯示了楊輝三角的前 7 行:
遞歸打印楊輝三角
楊輝三角形中的數(shù),正是(x+y)的 N 次方冪展開式各項的系數(shù),下面以遞歸的方法來打印楊輝三角形。
從楊輝三角形的特點出發(fā),可以總結出:
- 第 x 行有 x 個值(設起始行為第1行)。
- 對于第 x 行的第 y(y>=3)個值,有:當 y=1 或 y=x 時,其值為 1;當 y!=1 且 y!=x 時,其值為第 x-1 行的第 y-1 個值與第 x-1 行的第 y 個值之和。
將這些特點提煉成數(shù)學公式,則位于楊輝三角第 x 行第 y 列的值為:
?
根據(jù)上面的分析,完整的程序如下:
def triangles(x, y):
if y == 1 or y == x: # y=1或y=x時,函數(shù)返回值為1
return 1
else:
z = triangles(x-1, y-1) + triangles(x-1, y) # y為其他值時的遞推公式
return z
if __name__ == "__main__":
n = int(input("請輸入楊輝三角的行數(shù):"))
for i in range(1, n+1): # 輸出n行
for j in range(0, n-i+1):
print(" ", end=" ")
for j in range(1, i+1):
# 調(diào)用遞歸函數(shù),輸出第i行的第j個值
print("%6d " %(triangles(i, j)), end=" ")
print()
運行結果為:
請輸入楊輝三角的行數(shù):7
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
二維數(shù)組打印楊輝三角形
由于位于楊輝三角形兩個腰上的數(shù)都為 1,其他位置上的數(shù)等于它肩上兩個數(shù)之和,基于楊輝三角形的這個特點,就可以使用二維數(shù)組打印出楊輝三角形。
先定義二維數(shù)組 a[N][N],N 為常量,大于要打印的行數(shù) n。再將每行的第一個數(shù)和最后一個數(shù)賦值為 1,即 a[i][1]=a[i][i]=1。除了每行的第一個數(shù)和最后一個數(shù)以外,每行上的其他數(shù)都為其肩上的兩數(shù)之和,即 a[i][j]=a[i-1][j-1]+a[i-1][j]。
1) 計算楊輝三角形中的數(shù)值并存入二維數(shù)組
定義 row 和 column 兩個變量分別代表楊輝三角形的行和列,變量 n 表示要打印的行數(shù)。
# 計算楊輝三角中的數(shù)值并存入二維數(shù)組a中
for row in range(1, n+1):
# 令每行兩邊的數(shù)為1,循環(huán)從1開始,每行第一個數(shù)存放在a[row][1]中
a[row][1] = a[row][row] = 1
for row in range(3, n+1):
for column in range(2, (row-1)+1):
# 計算其他位置的值并存入二維數(shù)組
a[row][column] = a[row-1][column-1] + a[row-1][column]
2) 打印空格
在每行輸出之前,先打印空格占位,可使輸出更美觀。
第 1 行打印 3(n-1) 個空格,第 2 行打印 3(n-2) 個空格.....第 k 行打印 3(n-k)個空格。
for row in range(1, n+1):
for k in range(1, (n-row)+1):
print(" ", end="")
3) 打印楊輝三角形中的數(shù)
輸出楊輝三角形每一行之前都先打印空格,之后再使用下面的代碼輸出每行中的數(shù)值。
# 打印楊輝三角形
for row in range(1, n+1):
for k in range(1, (n-row)+1):
print(" ", end="") # 在每行輸出數(shù)之前先打印空格占位,使輸出更美觀
# column<=row表示不輸出數(shù)組中其他的數(shù),只輸出所需的數(shù)
for column in range(1, row+1):
print("%6d" %(a[row][column]), end=" ")
print() # 當一行輸出完以后換行繼續(xù)下一行的輸出
現(xiàn)在我們就需要把剛才的程序進行組合,構成完整的程序:文章來源:http://www.zghlxwxcb.cn/news/detail-417325.html
if __name__ == "__main__":
n = 0
a = [([0] * 14) for i in range(14)] # 定義一個行為14、列為14的二維數(shù)組
while n <= 0 or n >= 13: # 控制打印的行數(shù),行數(shù)過大會造成顯示不規(guī)范
n = int(input("請輸入楊輝三角的行數(shù):"))
print("打印 %d 行楊輝三角如下:" %n)
# 計算楊輝三角中的數(shù)值并存入二維數(shù)組a中
for row in range(1, n+1):
# 令每行兩邊的數(shù)為1,循環(huán)從1開始,每行第一個數(shù)存放在a[row][1]中
a[row][1] = a[row][row] = 1
for row in range(3, n+1):
for column in range(2, (row-1)+1):
# 計算其他位置的值并存入二維數(shù)組
a[row][column] = a[row-1][column-1] + a[row-1][column]
# 打印楊輝三角形
for row in range(1, n+1):
for k in range(1, (n-row)+1):
print(" ", end="") # 在每行輸出數(shù)之前先打印空格占位,使輸出更美觀
# column<=row表示不輸出數(shù)組中其他的數(shù),只輸出所需的數(shù)
for column in range(1, row+1):
print("%6d" %(a[row][column]), end=" ")
print() # 當一行輸出完以后換行繼續(xù)下一行的輸出
運行結果為:文章來源地址http://www.zghlxwxcb.cn/news/detail-417325.html
請輸入楊輝三角的行數(shù):7
打印 7 行楊輝三角如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
到了這里,關于Python實現(xiàn)楊輝三角(2種實現(xiàn)方案)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!