python实现杨辉三角(Pascal‘s Triangle)

1、递归算法:代码上相对简单,理解起来也比较容易,但是存在大量重复计算,生成大规模杨辉三角效率较低;

# 递归算法
def binomial_coefficient(n, k):
    if k == 0 or k == n:
        return 1
    return binomial_coefficient(n - 1, k - 1) + binomial_coefficient(n - 1, k)

def yanghui_triangle(num_rows):
    for i in range(num_rows):
        for j in range(i + 1):
            print(binomial_coefficient(i, j), end=" ")
        print()

num_rows = 5

yanghui_triangle(num_rows)

2、迭代算法:避免了递归中的重复计算,使用循环来构建每一行,效率较高;

# 迭代算法
def yanghui_triangle_iterative(num_rows):
    result = []
    for i in range(num_rows):
        row = [1]
        if i > 0:
            for j in range(1, i):
                # 计算当前行的元素,该元素等于上一行对应位置元素之和
                new_elem = row[j - 1] + result[i - 1][j]
                row.append(new_elem)
            row.append(1)
        result.append(row)
    return result

num_rows = 5

print("迭代算法")
for row in yanghui_triangle_iterative(num_rows):
    print(row)

3、组合公式算法:使用组合数公式直接计算杨辉三角的每个元素,效率很高,但可能会面临数值溢出问题;

# 组合公式算法
def yanghui_triangle_combinatorial(num_rows):
    result = []
    for i in range(num_rows):
        row = [1]
        if i > 0:
            for j in range(1, i):
                # 使用组合数公式计算当前元素
                new_elem = row[j - 1] * (i - j + 1) // j
                row.append(new_elem)
            row.append(1)
        result.append(row)
    return result

num_rows = 5

print("组合公式算法")
for row in yanghui_triangle_combinatorial(num_rows):
    print(row)

4、动态规划算法:避免了重复计算,且不容易出现数值溢出问题,适用于生成大规模的杨辉三角;

# 动态规划算法
def yanghui_triangle_dynamic_programming(num_rows):
    dp = [[1] * (i + 1) for i in range(num_rows)]
    for i in range(2, num_rows):
        for j in range(1, i):
            dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
    return dp

num_rows = 5

print("动态规划算法")
for row in yanghui_triangle_dynamic_programming(num_rows):
    print(row)

5、生成器算法:可以实时生成杨辉三角的每一行,适用于需要节省内存的情况;

# 生成器算法
def yanghui_triangle_generator(num_rows):
    result = []
    for i in range(num_rows):
        row = [1]
        if i > 0:
            for j in range(1, i):
                new_elem = row[j - 1] + result[i - 1][j]
                row.append(new_elem)
            row.append(1)
        result.append(row)
        yield row

num_rows = 5

print("生成器算法")
for row in yanghui_triangle_generator(num_rows):
    print(row)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值