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

歡迎訪問 生活随笔!

生活随笔

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

python

杨辉三角的几种 Python 实现方法

發布時間:2023/12/31 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杨辉三角的几种 Python 实现方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

楊輝三角的基本概念

楊輝三角,是二項式系數在三角形中的一種幾何排列,中國南宋數學家楊輝1261年所著的《詳解九章算法》一書中出現

特點

  • 每個數等于它上方兩數之和。
  • 每行數字左右對稱,由1開始逐漸變大。
  • 第n行的數字有n項。
  • 第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個斐波那契數。

  • 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 实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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