解释这个帕斯卡算法的工作原理

Explain the working of this pascal's algorithm

                  1

                1    1

             1     2     1

          1     3     3     1

       1     4     6     4     1

    1     5     10    10     5    1
def pascal(n):
    if n == 1:
        return [1]
    else:
        line = [1]
        previous_line = pascal(n-1)
        print(previous_line)
        for i in range(len(previous_line)-1):
            line.append(previous_line[i] + previous_line[i+1])
        line += [1]
    return line

print(pascal(4))

previous_line = pascal(n-1) 我没有得到这一行和 for 循环 pascal(n-1) returns 一个整数,我们怎么可以使用len 在 for 循环

中对该整数进行函数处理

pascal(n-1) 不是 return 一个数字,它 return 是一个列表。例如 pascal(4-1) return 列表 [1, 2, 1]。然后,您使用 len 来获取该列表的长度。给定该长度,您可以在 i 上创建一个循环来查找该列表的元素 ii+1 的总和。然后,将该总和附加到您正在创建的新列表中。

要获得示例图像中的三角形,您需要进行一些小调整:

def pascal(n, indent=""):
    line = [1]
    if n > 1:
        previous_line = pascal(n-1, indent+"  ")
        for i in range(len(previous_line)-1):
            line.append(previous_line[i] + previous_line[i+1])
        line += [1]
    print(indent + "".join([f'{i:4}' for i in line]))
    return line

pascal(6)

以防万一您正在寻找更简单的答案:

ROWS = 5

def row( a, b ) :
   return ' ' * (b-a-1) + ' '.join([i for i in str(11**a)])

for i in range(ROWS) :
    print row( i, ROWS )

输出:

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

如果您希望它在 python3 中工作,请在 print( .. ) 调用中添加括号。