Python楊輝三角演算法

FrankYou發表於2016-08-02
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def triangles():
      n = 1
      aboveList = []
      while True:
          if n == 1:
              aboveList = [1]
              n = n + 1
              yield [1]
          if n == 2:
              aboveList = [1,1]
              n = n + 1
              yield [1,1]
          newList = []
          for x in getMiddleList(aboveList):
              newList.append(x)
          newList.insert(0,1)
          newList.append(1)
          aboveList = newList
          n = n + 1
          yield newList
      return 'done'

def getMiddleList(aboveList):
    newList = []
    leftNodeVal=0 
    n=1
    for x in aboveList:
        if n == 1:
            leftNodeVal = x
        else:
            newList.append(x+leftNodeVal)
            leftNodeVal = x
        n += 1
    return newList

n=0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break

輸出結果:

[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]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

精簡後的演算法:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def triangles():
    l = [1,0]
    while True:
        yield l[0:-1]
        l[1:-1] = [l[i-1]+l[i] for i in range(1, len(l))]

n=0
for t in triangles():
    print(t)
    n = n + 1
    if n == 10:
        break        

 

相關文章