【问题标题】:Generating a fibonacci pyramid [closed]生成斐波那契金字塔[关闭]
【发布时间】:2019-05-28 00:24:56
【问题描述】:

我怎样才能生成下面的金字塔(第一行和第二行是预先施加的)?

          1 
       1  4  1 
    1  5  6  5  1  
 1  6 12 16 12  6  1

这是我迄今为止尝试过的,但没有奏效:

def main():
    first_row = [1]  # given in the question
    second_row = [1, 4, 1]  # given in the question
    sum = 0
    n = int(input("Enter number of rows: "))
    list_of_rows = list()
    list_of_rows.append(first_row)
    list_of_rows.append(second_row)
    for i in range(2, n):
        list_of_rows.append([])
        for j in range(0, 2*i+1):  # each row is 2 digits bigger than the previous

            list_of_rows[i].append(sum)
    print(list_of_rows)

【问题讨论】:

  • 你没有改变总和

标签: python arrays list numpy


【解决方案1】:

这似乎是斐波那契金字塔的变体,其中第二行应该是[1,1]

将行添加到序列中的一种简洁明了的方法是将前一行与[1,1,1] 卷积。您可以为此使用np.convolve

n = 4
l = [[None]]* n
l[0] = [1]
l[1] = [1,4,1]

for i in range(2,n):
    l[i] = list(np.convolve(l[i-1], [1,1,1]))

print(l)
[[1], [1, 4, 1], [1, 5, 6, 5, 1], [1, 6, 12, 16, 12, 6, 1]]

对于标准的斐波那契金字塔,解决方案是:

n = 10
l = [[None]]* n
l[0] = [1]
l[1] = [1,1]

for i in range(2,n):
    l[i] = list(np.convolve(l[i-1], [1,1]))

print(l)
[[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]]

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2011-12-18
    • 2011-04-26
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2017-11-13
    相关资源
    最近更新 更多