杨辉三角的几种 Python 实现方法
生活随笔
收集整理的這篇文章主要介紹了
杨辉三角的几种 Python 实现方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
楊輝三角的基本概念
楊輝三角,是二項式系數在三角形中的一種幾何排列,中國南宋數學家楊輝1261年所著的《詳解九章算法》一書中出現
特點
Python的三種實現方法
方法一
-
將楊輝三角每次計算時,都抽象成每行后面先增加一個0
-
于是本行第i個元素就等于上一行的(i-1)個元素和i元素的和(每行第0個元素是上一行抽象后的第0個元素和第(0-1)個元素,即抽象出來的0與1的和)
-
抽象出來的0為下一行提供足夠的遍歷次數
[1, 0] [1, 1, 0] [1, 2, 1, 0] [1, 3, 3, 1, 0] [1, 4, 6, 4, 1, 0]
代碼:
def triangles():row = [1]while True:yield rowrow.append(0) # 補零以便于計算下一行數據row = [row[i - 1] + row[i] for i in range(len(row))] # 通過本行相鄰兩個數據相加獲得下一行的數據if __name__ == '__main__':t = triangles()for i in range(6):print(next(t))結果:
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1]方法二
- 循環內的遍歷從1開始,即從代碼開頭定義每行的初始值為1,后續不再改變
- 由第二個元素開始,每行元素為上一行對應位置和前一位置元素的和
- 每行最后一個元素都為1,直接最后添加即可
代碼:
def triangles():row = [1]while True:yield rowfor i in range(1, len(row)):row[i] = pre_line[i] + pre_line[i - 1] # 本行第 i 個元素為上一行的 i 元素與 i-1 元素相加row.append(1) # 本行最后需要補元素 1pre_line = row[:] # 復制本行, 用于計算下一行數據if __name__ == '__main__':t = triangles()for i in range(6):print(next(t))結果:
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1]方法三
- 此方法相對較復雜,它在列表內嵌套列表形成二維列表,楊輝三角的每行為二維列表的一個列表元素
- 函數遍歷楊輝三角的每一行,單獨計算該行的每一個元素,其中每個元素為上一行同位置的元素和前一個元素之和
- 上一行元素在函數中表現為二維列表的前一個元素
- 該行首尾計算時,分別抽象為前后多一個零進行計算
代碼:
def triangles (line):result = [[1]]for row in range(1, line): # for 循環計算楊輝三角一共多少行current_row = []for column in range(row+1): # for 循環計算當前行一共多少個元素if column == 0:upper_former_param = 0 # 計算此行的第一個元素, 則它上一行的前一個元素為 0else:upper_former_param = result[row-1][column-1] # 獲得此行元素在上一行的前一個元素if column == len(result[row-1]):upper_param = 0 # 計算此行的第一個元素, 則它上一行同樣位置的元素為 0else:upper_param = result[row-1][column] # 獲得此行元素在上一行同樣位置的元素param = upper_former_param + upper_param # 此行的元素為上一行同樣位置及其前一個位置的和current_row.append(param) # 將該元素添加到這一行result.append(current_row) # 將這一行添加到結果中return resultif __name__ == '__main__':print(triangles(6))結果:
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]總結
以上是生活随笔為你收集整理的杨辉三角的几种 Python 实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对OB28的源代码进行调试
- 下一篇: 电子信息工程跨保计算机、生物医学工程保研