Python生成器实现杨辉三角

杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。(引自于:百度百科)

杨辉三角

很容易就得出规律: 除根以外,每个数都由它上层的左右两数之和,一个数不存在即视为0。根为1

由此规律,易得每层边界数值为1

下面用Python的生成器来实现这个著名的三角:)

生成器实现

# _*_ coding: utf-8 _*_

def yangHui(level):
    for i in range(level):
        # 由于根不符合抽象出的规律,单独处理
        if i == 0:
            yield [1]
            gen = yangHui(level)
        else:
            current_level = [1]
            prev_level = next(gen)
            try:
                for j in range(i):
                    current_level.append(prev_level[j] + prev_level[j+1])
            # 这里会产生`IndexError`异常,因为最右边只有一个加数了,j+1过界
            except:
                current_level.append(prev_level[j])
                #pass
            finally:
                #current_level.append(1)
                yield current_level

if __name__ == '__main__':
    for i in yangHui(10):
        print(i)                

运行结果如下:

wk:mysource mac$ python yanghui.py 
[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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何使用Python队列实现杨辉三角。 首先,让我们先定义一个生成杨辉三角的函数。 ```python def generate_pascal_triangle(num_rows): triangle = [] for row_num in range(num_rows): row = [None for _ in range(row_num + 1)] row[0], row[-1] = 1, 1 for j in range(1, len(row) - 1): row[j] = triangle[row_num - 1][j - 1] + triangle[row_num - 1][j] triangle.append(row) return triangle ``` 接下来,我们需要使用队列来实现这个函数。假设我们要生成杨辉三角的前n行。 首先,我们需要创建一个队列,将第一行的元素1推入队列中。 ```python from queue import Queue def generate_pascal_triangle(num_rows): triangle = [] q = Queue() q.put(1) ``` 接下来,我们开始遍历每一行。每当我们遍历一行时,我们就需要从队列中弹出一个元素,并将它添加到当前行的列表中。 ```python from queue import Queue def generate_pascal_triangle(num_rows): triangle = [] q = Queue() q.put(1) for row_num in range(num_rows): row = [] for i in range(row_num + 1): row.append(q.get()) triangle.append(row) ``` 当我们完成当前行的遍历时,我们需要将下一行的元素推入队列中。这可以通过在当前行的列表中添加1,然后遍历列表中除第一个和最后一个元素以外的其他元素来实现。 ```python from queue import Queue def generate_pascal_triangle(num_rows): triangle = [] q = Queue() q.put(1) for row_num in range(num_rows): row = [] for i in range(row_num + 1): row.append(q.get()) triangle.append(row) q.put(1) for j in range(len(row) - 1): q.put(row[j] + row[j+1]) q.put(1) return triangle ``` 最后,我们返回杨辉三角的列表即可。 这就是使用队列实现杨辉三角的方法。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值