杨辉三角形,又称贾宪三角形、帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

下图显示了杨辉三角的前 7 行:

递归打印杨辉三角

杨辉三角形中的数,正是(x+y)的 N 次方幂展开式各项的系数,下面以递归的方法来打印杨辉三角形。

从杨辉三角形的特点出发,可以总结出:

  • 第 x 行有 x 个值(设起始行为第1行)。
  • 对于第 x 行的第 y(y>=3)个值,有:当 y=1 或 y=x 时,其值为 1;当 y!=1 且 y!=x 时,其值为第 x-1 行的第 y-1 个值与第 x-1 行的第 y 个值之和。

将这些特点提炼成数学公式,则位于杨辉三角第 x 行第 y 列的值为:

根据上面的分析,完整的程序如下:

def triangles(x, y):if y == 1 or y == x: # y=1或y=x时,函数返回值为1return 1else:z = triangles(x-1, y-1) + triangles(x-1, y) # y为其他值时的递推公式return z
if __name__ == "__main__":n = int(input("请输入杨辉三角的行数:"))for i in range(1, n+1): # 输出n行for j in range(0, n-i+1):print("   ", end=" ")for j in range(1, i+1):# 调用递归函数,输出第i行的第j个值print("%6d  " %(triangles(i, j)), end=" ")print()

运行结果为:

请输入杨辉三角的行数:71  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,其他位置上的数等于它肩上两个数之和,基于杨辉三角形的这个特点,就可以使用二维数组打印出杨辉三角形。

先定义二维数组 a[N][N],N 为常量,大于要打印的行数 n。再将每行的第一个数和最后一个数赋值为 1,即 a[i][1]=a[i][i]=1。除了每行的第一个数和最后一个数以外,每行上的其他数都为其肩上的两数之和,即 a[i][j]=a[i-1][j-1]+a[i-1][j]。

1) 计算杨辉三角形中的数值并存入二维数组

定义 row 和 column 两个变量分别代表杨辉三角形的行和列,变量 n 表示要打印的行数。

# 计算杨辉三角中的数值并存入二维数组a中
for row in range(1, n+1):# 令每行两边的数为1,循环从1开始,每行第一个数存放在a[row][1]中a[row][1] = a[row][row] = 1
for row in range(3, n+1):for column in range(2, (row-1)+1):# 计算其他位置的值并存入二维数组a[row][column] = a[row-1][column-1] + a[row-1][column]

2) 打印空格

在每行输出之前,先打印空格占位,可使输出更美观。

第 1 行打印 3(n-1) 个空格,第 2 行打印 3(n-2) 个空格.....第 k 行打印 3(n-k)个空格。

for row in range(1, n+1):for k in range(1, (n-row)+1):print("   ", end="")

3) 打印杨辉三角形中的数

输出杨辉三角形每一行之前都先打印空格,之后再使用下面的代码输出每行中的数值。

# 打印杨辉三角形
for row in range(1, n+1):for k in range(1, (n-row)+1):print("   ", end="") # 在每行输出数之前先打印空格占位,使输出更美观# column<=row表示不输出数组中其他的数,只输出所需的数for column in range(1, row+1):print("%6d" %(a[row][column]), end=" ")print() # 当一行输出完以后换行继续下一行的输出

现在我们就需要把刚才的程序进行组合,构成完整的程序:

if __name__ == "__main__":n = 0a = [([0] * 14) for i in range(14)] # 定义一个行为14、列为14的二维数组while n <= 0 or n >= 13: # 控制打印的行数,行数过大会造成显示不规范n = int(input("请输入杨辉三角的行数:"))print("打印 %d 行杨辉三角如下:" %n)# 计算杨辉三角中的数值并存入二维数组a中for row in range(1, n+1):# 令每行两边的数为1,循环从1开始,每行第一个数存放在a[row][1]中a[row][1] = a[row][row] = 1for row in range(3, n+1):for column in range(2, (row-1)+1):# 计算其他位置的值并存入二维数组a[row][column] = a[row-1][column-1] + a[row-1][column]# 打印杨辉三角形for row in range(1, n+1):for k in range(1, (n-row)+1):print("   ", end="") # 在每行输出数之前先打印空格占位,使输出更美观# column<=row表示不输出数组中其他的数,只输出所需的数for column in range(1, row+1):print("%6d" %(a[row][column]), end=" ")print() # 当一行输出完以后换行继续下一行的输出

运行结果为:

请输入杨辉三角的行数:7
打印 7 行杨辉三角如下:11      11      2      11      3      3      11      4      6      4      11      5     10     10      5      11      6     15     20     15      6      1

Python实现杨辉三角(2种实现方案)相关推荐

  1. python杨辉三角代码,python实现杨辉三角的几种方法代码实例

    方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ trian ...

  2. 用python打印杨辉三角

    杨辉三角的形式如下图(图片来自维基百科)所示: 用列表的形式呈现如下: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, ...

  3. python杨辉三角居中_利用python打印杨辉三角

    用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...

  4. python语言输入杨辉三角_?新手求教:请问怎样用python 显示杨辉三角,任意输入一个数N,输出一个N 1层的杨辉三角。...

    如何用python输出杨辉三角 iangles里用到了yield,yield 的作用就是把一个函数变成一个 generator 用python语言输出九九乘法表 杨辉三角 求代码 1.九九乘法表def ...

  5. Python打印杨辉三角-生成器语法yield的理解

    ###先看代码. def triangles():# 定义最初的数据 1 ,存到列表中lt = [1]# 进入循环while True:# 使用yield语句产生一个生成器,返回当前列表yield l ...

  6. python杨辉三角两种写法详解

    一般写杨辉三角都是用二维数组,通过二维数组的下标,可以非常容易的计算出下一行结果. [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 1 ...

  7. 用python实现杨辉三角的几种不同方式

    杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...

  8. 用python编写杨辉三角金字塔_用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔...

    分享几道简单的python打印输出的问题,本质上都是可以将其分解成一个大循环之中有几个小循环. 1.杨辉三角 主要特点: 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 每行端点与结 ...

  9. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码

    Python极简代码实现杨辉三角示例代码 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list ...

最新文章

  1. go异常处理:自定义异常代码示例
  2. Oracle 原理: 公有同义词 和 私有同义词
  3. BZOJ2209: [Jsoi2011]括号序列
  4. android自动化测试工具之monkey
  5. 《剑指offer》数据流中的中位数
  6. 工业以太网交换机的接口知识详解
  7. MFC:2个重载中没有一个可以转换所有参数类型
  8. java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件
  9. android 音量级别调节,调整Android音量等级及默认音量
  10. 复旦大学python期末考试_在复旦大学当学渣是怎样的?
  11. 每日算法系列【LeetCode 289】生命游戏
  12. 英伟达显卡不同架构_【英伟达NVIDIA显卡GPU架构核心代号名称一览】(截止到 2018·08)...
  13. 互盾科技:智慧源于勤奋,伟大出自平凡
  14. python函数.most_common()
  15. Excel教程(8) - 财务函数
  16. 一个喷嚏就能传播病毒?关于病毒,还有多少是你不知道的?
  17. 平安电工冲刺深交所:年营收8.8亿 为潘协保家族企业
  18. 用于即使在太空中也能随时随地进行编码的移动应用程序
  19. 教你用Python绘制3D地图,做出来效果太酷炫啦~
  20. Python 古诗写入、复制

热门文章

  1. 正则表达式如何匹配空格
  2. python技术手册第二版_Python技术手册(第2版) 中文PDF
  3. 蝙蝠算法(Bat Algorithm,BA)算法
  4. CameraSR----Camera Lens Super-Resolution个人笔记
  5. 基于51单片机的蓝牙智能台灯设计
  6. 网络安全 中间人攻击-DNS欺骗 使用ettercap
  7. Unity3d 周分享(18期 2019.6.1 )
  8. 大数据思维养成从认识大数据的本质开始
  9. php将json转换成对象,php将json转换成对象或数组
  10. ArcMap打开ArcToolbox异常闪退解决办法