杨辉三角
def generate_pascals_triangle(n):
if n == 0:
return []
elif n == 1:
return [[1]]
else:
result = generate_pascals_triangle(n - 1)
last_row = result[-1]
new_row = [1] + [last_row[i] + last_row[i + 1] for i in range(len(last_row) - 1)] + [1]
result.append(new_row)
return result
def print_pascals_triangle(triangle):
for row in triangle:
print(" ".join(str(num) for num in row).center(len(triangle[-1]) * 2))
n = int(input("n="))
triangle = generate_pascals_triangle(n)
print_pascals_triangle(triangle)
generate_pascals_triangle(n) 函数:这个函数接收一个整数n作为输入,用于生成帕斯卡三角形的前n行。
如果n为0,函数返回一个空列表。
如果n为1,函数返回一个包含单个列表[1]的列表,这是帕斯卡三角形的第一行。
如果n大于1,函数首先递归调用自己以生成前n-1行的帕斯卡三角形,然后将这n-1行的结果存储在result变量中。
接着,函数计算第n行(即新行),方法是使用前一行的值来计算当前行的每个值(除了开始和结束的1之外,每个值是它正上方和左上方两个数的和)。
最后,将新计算得到的行添加到result列表中,并返回result。
print_pascals_triangle(triangle) 函数:这个函数接收一个列表(帕斯卡三角形的表示)作为输入,并打印这个三角形。
对于三角形的每一行,函数首先将该行中的每个数字转换为字符串,并用空格将它们连接起来。
然后,使用str.center()方法将得到的字符串居中,居中的宽度是三角形最后一行长度的两倍。这样做的目的是为了在打印时让三角形看起来更加美观。
最后,打印出每一行。
主程序:程序首先提示用户输入一个整数n,然后调用generate_pascals_triangle(n)函数生成帕斯卡三角形的前n行,并存储在triangle变量中。最后,调用print_pascals_triangle(triangle)函数打印出这个三角形。
但是,在打印帕斯卡三角形时,每行的居中宽度是基于三角形最后一行的长度来计算的,这会导致当n较小时,前几行看起来像是被“挤压”在了一起。