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)