IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 杨辉三角(Java实现) -> 正文阅读

[数据结构与算法]杨辉三角(Java实现)

我们在学习数学和编程的时候总会听到一个叫杨辉三角的东西。首先介绍什么是杨辉三角?
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。引自百度百科
为祖先的智慧点赞!!

在这里插入图片描述
通俗的讲,杨辉三角就是个由数字组成的三角形,三角形的顶是1,三角形的两个侧边也全是1,第几行就存在几个数字。通过观察每一行数字,我们可以发现,出来侧边上数字之外,每个数都是上面两个数字的和。

通过下面一个表来形象的观察,除去侧边,我们来观察橘红色的部分,可以看到每个数都是它上面两个数的和。
在这里插入图片描述到这里,我们已经了解了什么是杨辉三角了,对杨辉三角的一些特性(编写程序时会用到)也基本掌握了。接下来,让我们用代码实现它。代码使用Java语言,使用二维数组和递归两种方式实现。
输出形式
在这里插入图片描述

1. 二维数组

这是比较简单好理解的一种方式。首先,我们将杨辉三角想象成一个二维数组a[i][i],对于侧边总是1的情况分析,左边侧边就是a[i][0],即当我们的j=0的时候数组值应该是1;同理当为==a[i][j]==中的i=j的时候,为右边上的数字,此时数组的值也为1。如下:

if (j==0 || j==i) {
	a[i][j] = 1;
}

对于除去侧边的其它数字的数值是它上面的两个数的和,用数组表示就是
a[i][j] = a[i-1][j] + a[i-1][j-1]
到这里我们对如何使用二维数组表示杨辉三角里面的数字已经很清楚。
全部代码如下:

public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		//定义一个数n作为杨辉三角的行数
		int n = scanner.nextInt();
		/*
		 * 根据n构建空的二维数组
		 * 一共n行,一行n个数
		 */
		int a[][] = new int[n][n] ;
		//循环n行
		for (int i = 0; i <n; i++) {
				//每行有n个数字
				for (int j = 0; j <= i; j++) {
					//如果是这一行第一个或者最后一个数,设置为1,并存入数组
					if (j==0 || j==i) {
						a[i][j] = 1;
					//否则,该数为上面两数之和,存入二维数组
					}else {
						a[i][j] = a[i-1][j] + a[i-1][j-1];
					}
					//输出数字
					System.out.print(a[i][j]+" ");
				}
				//换下一行
				System.out.println();
		}
	}

输入:4
输出:

1 
1 1 
1 2 1 
1 3 3 1 

2. 使用递归

使用递归的思想就是构造一个递归函数fun(int i,int j),传入两个参数分别作为行和列,如果是第一列(j=0)或者最后一列(j=i)则返回1,否则这个数等于上一行的两个数的和,同数组原理差不多:fun(i-1, j) + fun(i-1, j-1)。

	//构建递归函数,参数i表示行,j表示列
	static private int fun(int i,int j) {
		//判断是否是该行第一个数或者最后一个,如果是返回1
		if (j==1||i==j) {
			return 1;
		//否则是上一行上面两数之和
		}else {
			return fun(i-1, j) + fun(i-1, j-1);
		}
	}
	public static void main(String[] args) {
		//定义一个数n作为杨辉三角的行数
		int n;
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		//此循环是行数
		for (int i = 1; i <= n; i++) {
			//此循环是列数
			for (int j = 1; j <= i; j++) {
				//调用构造函数打印即可
				System.out.print(fun(i, j)+" ");
			}
			//换行
			System.out.println();
		}
	}

输入:4
输出:

1 
1 1 
1 2 1 
1 3 3 1 

菜鸡冲冲冲!!1

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:53:24  更:2021-10-16 19:53:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:26:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码