Python实现杨辉三角(2种实现方案)

article/2025/8/27 3:41:21

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

下图显示了杨辉三角的前 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


http://chatgpt.dhexx.cn/article/VyR3iLbR.shtml

相关文章

【Python实现杨辉三角】

目录 什么是杨辉三角 杨辉三角解法 1. 定义法 2. 计算杨辉三角 补0法 3. 杨辉三角&#xff0c;对称法 4. 杨辉三角&#xff0c;单列表方法 5.列表嵌套&#xff08;二维数组&#xff09; 6. 新旧两行&#xff0c;一次性开辟新行 7.yield函数 8.zip函数 参考资料链接&…

c++自定义函数

对于小型应用程序来说不设计自定义函数完全可行&#xff0c;但随着程序越来越大&#xff0c;越来越复杂&#xff0c;实现的功能越来越多&#xff0c;如果不使用函数&#xff0c;main函数将变的越来越复杂越来越雍肿越来越令人难懂&#xff0c;而在更改程序的每一个功能的时候&a…

C++ 自定义函数

C的函数分两种&#xff1a; 今天&#xff0c;我们就来讲一下自定义函数。 好了&#xff0c;自定义函数讲完了&#xff0c;若想了解其他关于自定义函数的内容&#xff0c;请点击下面方框&#xff1a; C递归算法_闪耀的天狼星的博客-CSDN博客_c递归算法汉诺塔大家都玩过吧&#…

C语言:自定义函数实现对字符串的复制

#include <stdio.h> void f(char*str1,char*str2)//函数名为f&#xff0c;自定义字符串连接函数 {int i0;while(str2[i]!0) {str1[i]str2[i];//把b复制到a中i;}str1[i]\0;//添加字符串结束符 } int main() {char a[100],b[100];puts("请输入字符串:\n");gets…

C语言之自定义函数(综合)

//设定一个函数&#xff0c;来比较两个数之间的较大值 int get_max(int x, int y) {int z 0;if (x > y)z x;elsez y;return z;} int main() {int a 10;int b 20;int maxget_max(a, b);printf("%d", max);return 0; } //函数返回类型的地方写出&#xff1a;vo…

[C语言] 函数:库函数--自定义函数--函数的调用--练习--详解<个人>------(1)

文章目录 前言一. 函数是什么&#xff1f;二. C语言中函数的分类三. 库函数四. 自定义函数五. 函数的调用六. 练习总结 前言 本节内容主要记录函数的相关内容&#xff0c;其中包括&#xff1a;库函数&#xff0c;自定义函数&#xff0c;函数的调用&#xff0c;函数的习题练习。…

C语言中的函数 | 库函数和自定义函数

写在前面: 今天我们需要学习和了解的是C语言中的函数,其中C语言的函数划分为库函数和自定义函数两种.接下来我们一起探究两者之间的关系. 一.C语言中函数的分类 库函数自定义函数 二.库函数 库函数到底是什么呢? 顾名思义,可以通俗的理解为库里面的函数.这些函数都是频繁使…

c++自定义函数简单介绍

大家好&#xff0c; 今天给大家介绍一下自定义函数。 如有错误请在评论区指出 正文&#xff1a; 1.简单介绍&#xff1a; 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数…

C语言入门系列 - 自定义函数

C语言入门系列 - 自定义函数 第一节 C 语言基础以及基本数据类型 第二节 C 语言运算符 第三节 C 语言控制语句 第四节 C 语言自定义函数 第五节 C 语言修饰变量的关键字 第六节 C 语言构造数据类型–数组 第七节 C 语言字符串 第八节 C 语言指针 第九节 指针与函数、指针函数、…

C语言-函数(自定义函数)

C语言中函数的分类&#xff1a; 1 库函数 2 自定义函数 自定义函数 如果库函数能干所有的事情&#xff0c;那还要程序员做什么&#xff1f; 所以更重要的是自定义函数 函数的组成&#xff1a; ret_type fun_name (part1) { statement; //语句项 &#xff08;函数体&…

C语言自定义函数使用

补充1&#xff1a;优先级&#xff0c;解答问题区分*p,*p0,*p0 <1>.首先要理解前后置的区别&#xff0c;前置&#xff0c;先计算后使用&#xff1b;后置&#xff0c;先使用后计算。 可用示例理解&#xff1a; <2>.其次要理解操作符的优先级 优先级从高到低&#…

C语言【库函数与自定义函数】详解

文章目录 一.什么是函数二.库函数1. 什么是库函数2. 为什么会有库函数&#xff1f;3.使用库函数的注意事项4.对学习库函数的建议 三.自定义函数1.什么是自定义函数2.自定义函数举例 一.什么是函数 提起函数&#xff0c;我们可能并不陌生&#xff0c;我们可能会联想到数学中的函…

C语言中的函数(重点介绍自定义函数)

C语言中的函数分为库函数和自定义函数&#xff0c;本篇重点介绍自定义函数中的函数调用 函数由一个或多个语句块组成&#xff0c;负责完成某项特定任务&#xff0c; 相较于其他代码&#xff0c;具有相对的独立性&#xff0c;一般会有返回值和输入参数&#xff0c;提供对过程的封…

C语言自定义函数的声明

C语言函数为什么要声明呢&#xff1f;我们在创建自定义函数的都知道要将自定义子函数放在主函数前面那么是为什么呢&#xff1f;可不可以不放在前面呢&#xff1f;小问号你是不是也一样有很多朋友呢&#xff1f; 答案是可以不把我们自己的自定义子函数放在前面&#xff1f;但是…

c语言函数详解1——自定义函数

这篇文章理论性知识比较多&#xff0c;不过对于初学者对于函数的理解会有更深层次的帮助 目录 c语言的函数——子程序 自定义函数 c语言的函数——子程序 *是大型程序中的某部分代码&#xff0c;由一个或者多个语句组成&#xff0c;她负责完成某项特定的任务&#xff0c;相较…

自定义函数

目录 一、自定义函数 二、函数参数 、传值调用和传址调用 2、1 传值调用 2、2 传址调用 三、函数的嵌套和链式访问 四、函数递归 一、自定义函数 C语言中有两类函数&#xff0c;一类是库函数&#xff0c;另外一类是自定义函数。自定义函数从字面意思上理解就是自…

C语言自定义函数

函数定义 return_type function_name([datatype1 arg1],[datatype1 arg2],...) { //函数体 } 函数三要素 返回值类型 函数名 参数列表 自定义函数的完整写法 #include <stdio.h> // 函数原型 int sum(int,int); // 调用函数 int main() { int sum(); } // 函数定义 i…

学习pyqt 继承中self的疑问

前面学习了&#xff0c;面对对象编程&#xff0c;继承&#xff0c;有了一些理解。继续学习pyqt5 看到下面有了一些疑问。 import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QIconclass Example(QWidget):def __init__(self):super().…

Python中类函数中self是什么

首先我们来看两组代码运行的结果 代码组一&#xff1a; class C1:def func1():x10print("func1的x&#xff1a;",x)def func2(self):x20print("func2的x&#xff1a;",x)C1.func1() C1.func2()结果如下 代码组二&#xff1a; class C1:def func1():x…

python中return self用法详解

直接上代码来理解return self的用法&#xff01; 示例代码1&#xff1a; class Test(object):def __init__(self):self.age 25def add(self):self.age 1print(self.age)obj Test() obj.add()运行结果&#xff1a; 有时候当我们想对实例对象的方法进行连续调用时&#xff0…