杨辉三角形(Java版)

news2024/11/24 2:12:56

不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。

文章目录

  • 1. 什么是杨辉三角形
  • 2. 实现思路(方式)
    • 2.1 递归方式
    • 2.2 递归+数组方式
  • 代码编写
  • 总结


1. 什么是杨辉三角形

    杨辉是一个人名,我国宋代数学家杨辉在其著作《详解九章算法》中给出的一个用数字排列起来的三角形阵。由于杨辉在书中引用了贾宪著的《开方作法本源》和“增乘开方法”,因此这个三角形也称“贾宪三角”。它的规律我们先看如下图:
在这里插入图片描述
如上图所示,分析的很清楚了,其实仔细思考一下就很容易看出这和数学中的二项式是有很大的联系的,即(a+b)^n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。


2. 实现思路(方式)

     杨辉三角的实现有很多种,而本篇文章只介绍两种,一种是非常常见,也是比较简单实现的递归方式,另一种是在递归的基础上加上数组的存储功能实现。接下来我们一一刨析。

2.1 递归方式

    在说思路之前,我们先得理解什么是递归。递归简单的理解方式就是在一个方法中满足一定条件的时候不断调用自身。现在已经理解了什么是递归,那么满足杨辉三角的条件是什么呢?我们看如下图:
在这里插入图片描述
由上图所示,把杨辉三角看出行和列,然后再进行分析。我们由图可以看出每一行的第1列和最后1列都是数字1,然后其余的都是从当前数的上一行左右两边相加得到的数字。比如第三行第二列的2,就是上一行得到左右两边相加(1+1)得到的。根据这个规律,就可以得出一条递归公式,我们把行用字母a表示,列用字母b表示,最终得出的公式为:s(a,b)=s(a-1,b-1) + s(a-1,b),根据这个公式就可以得到当前a行b列的数字。

2.2 递归+数组方式

    根据刚刚的分析,我们已经知道了什么是递归和本篇文章的杨辉三角的递归公式。那么递归+数组的方式就是在递归的基础上加上数组。而我们知道数组是可以存储数据的,那么我们可以利用这个特性把递归出来的每一个数字存到数组中,由此实现了递归+数组的方式。

代码编写

    经过上述的详情介绍,接下来就是代码实现了。不过在实现代码之前,我们来一个需求,把前面两种方式合并成为一个需求,这种方式实现杨辉三角,我觉得会更有意思。那么我们先看需求:定义一个类,在类中声明两个成员变量总行数和存储杨辉三角每个数字的二维数组,最后定义两个方法,第一个为使用递归获得杨辉三角,第二个为实现存储杨辉三角。这个需求已经介绍的很清晰了,那么废话不多说,直接上代码。

import java.util.Scanner;

/**
 * 使用递归实现杨辉三角形并把每一行的数据存储到数组中
 */
public class YangHui {
    private int n; //总行数
    private int[][] array; //存储前n行杨辉三角形的二维数组

    /**
     * 构造方法
     */
    public YangHui(){}

    public YangHui(int n, int[][] array) {
        this.n = n;
        this.array = array;
    }

    /**
     * 使用递归实现杨辉三角形
     * @param a 行
     * @param b 列
     * @return
     */
    public int iter(int a, int b){
        if (b == 1 || b == a){
            return 1;
        }else {
            return iter(a-1,b-1) + iter(a-1,b);
        }
    }

    /**
     * 利用数组把杨辉三角形的数据存储到数组中,并打印
     */
    public void printNum() {
        for (int i = 0; i < this.array.length; i++) { //行
            for (int j = 0; j <= i; j++) { //列
                //调用迭代方法存储到数组中
                array[i][j] = iter(i + 1, j + 1);
                //打印
                System.out.print(array[i][j] + "\t");
            }
            System.out.println();
        }
    }


    /**
     * 主程序入口
     * @param args
     */
    public static void main(String[] args) {
        //1.使用扫描仪
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入行数:");
        int row = sc.nextInt();

        //2.创建实例 并使用构造方法设置对象属性
        YangHui yangHui = new YangHui(row,new int[row][row]);

        //4.调用方法打印杨辉三角形
        yangHui.printNum();

    }
}

运行结果如图所示:
在这里插入图片描述


总结

以上就是使用java实现的杨辉三角形,实现的是直角形的杨辉三角,如果想实现等腰形的杨辉三角,可以在存储杨辉三角并打印的printNum方法里进行自行修改。本篇的内容就到此结束了,如果该篇内容觉得对你有所帮助,请留下您的足迹。最后如果上述有所出入,欢迎道友畅聊相关技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx简单使用

安装龙蜥操作系统 镜像文件在这里下载就行 下载之后新建虚拟机 ISO选择刚才下载文件即可 具体配置可以照我来 也可自定义 基本工具安装 安装一下最基本的网络工具 yum install net-tools openssh-server wget tar make vim -y测试一下ssh连接 方便后期操作 修改主机名 …

Jedis 使用教程总结

一、Redis 常用命令 1 连接操作命令 quit&#xff1a;关闭连接&#xff08;connection&#xff09;auth&#xff1a;简单密码认证help cmd&#xff1a; 查看 cmd 帮助&#xff0c;例如&#xff1a;help quit 2 持久化 save&#xff1a;将数据同步保存到磁盘bgsave&#xff…

设计模式之原型模式

文章目录1.前言概念使用场景2.原型模式核心组成UML图3.浅拷贝与深拷贝基本类型与引用类型浅拷贝代码演示深拷贝代码演示4.原型模式的优点与缺点1.前言 概念 原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能。这种类型的…

Cpp知识点系列-类型转换

前言 在做题的时候发现了需要用到类型转换&#xff0c;于是在这里进行了简单的记录。 历史原因&#xff0c;慢慢整理着发现类型转换也能写老大一篇文章了。又花了时间来梳理一下就成了本文了。 cpp 之前使用的环境是DEV-C 5.4&#xff0c;而对应的GCC版本太低了。支持c11需要…

【CSS】重点知识梳理,这样上手无压力

推荐前端学习路线如下&#xff1a; HTML、CSS、JavaScript、noodJS、组件库、JQuery、前端框架&#xff08;Vue、React&#xff09;、微信小程序和uniapp、TypeScript、webpack 和 vite、Vue 和 React 码源、NextJS、React Native、后端内容。。。。。。 CSS定义&#xff1a; …

docker入门到精通一文搞定

文章目录前言一、Docker概述1.Docker为什么会出现&#xff1f;2.Docker相比VM技术3.Docker 能做什么&#xff1f;3.1 比较Docker和虚拟机技术的不同&#xff1a;3.2 DevOps (开发、运维)&#xff1a;4个特点二、Docker安装1.dokcer架构图&#xff1a;2.Docker基本组成&#xff…

python+django体质测试数据分析及可视化设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 B/S架构 4 本选题则旨在通过标签分类管理等方式&#xff0c;实现管理员&#xff1a;管理员&#xff1a;首页、个…

11.前端笔记-CSS盒子模型-外边距margin

1、margin 1.1 margin的语法 盒子与盒子之间的距离 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

linux 系统的磁盘 mbr 转gpt方法

linux磁盘用fdisk格式化挂盘的格式都为mbr, 不支持大于2T的磁盘扩容&#xff0c;需要用parted转化。 查询磁盘格式 输入&#xff1a; fdisk -l 看Disk label type 的值&#xff0c;是dos 的为mbr 是gpt的为gpt 当前&#xff0c;因挂盘时&#xff0c;用的fdisk方式选gpt,挂…

基于STM32的u8g2移植以及学习

实验硬件&#xff1a;STM32F103C8T6&#xff1b;0.96寸OLED&#xff08;12864&#xff09; U8g2库开源网址&#xff1a;https://github.com/olikraus/u8g2 一、u8g2库知识 1.1 什么是u8g2&#xff1f; U8g2是嵌入式设备的单色图形库。主要应用于嵌入式设备&#xff0c;包括我…

正大国际期货:投资外盘期货如何运用K线图中十字星形态?

很多人都明白&#xff0c;做外盘期货需要学会看线图。那么K线图上面的一根两根的柱子代表的什么意思呢&#xff1f;其中星星点点的十字星又是什么意思&#xff1f;下面正大IxxxuanI详细给大家讲解一下&#xff01; 1、什么是多头十字星形态&#xff1f; 多头十字星是一种经典…

KEITHLEY 吉时利2601B源表产品技术参数

KEITHLEY 2601B 吉时利 2601B 源表让您可以比以前更快、更轻松、更经济地进行精密直流、脉冲和低频交流源测量测试。Keithley 2601B 通过结合以下特性&#xff0c;为 IV 功能测试提供竞争产品 2 到 4 倍的测试速度&#xff1a; 吉时利的高速第三代源测量单元 (SMU) 设计 嵌…

【Python】八、函数的使用

文章目录实验目的一、定义函数二、调用函数三、参数的传递和函数的返回值四、编写函数&#xff0c;输入不同的参数&#xff0c;绘制不同的科赫曲线参考代码实验截图实验目的 掌握函数的定义和调用&#xff1b;掌握函数的用法&#xff1b;理解递归&#xff1b;培养学生动手查阅资…

开源:分享4个非常经典的CMS开源项目

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

Spark系列之Spark安装部署

title: Spark系列 第二章 Spark安装部署 2.1 版本选择 下载地址&#xff1a; https://archive.apache.org/dist/spark 四大主要版本 Spark-0.X Spark-1.X&#xff08;主要Spark-1.3和Spark-1.6&#xff09; Spark-2.X&#xff08;最新Spark-2.4.8&#xff09; Spark-3.x&a…

降级、熔断和限流———一看就会

设定&#xff1a;A上游系统、B本系统、C下游系统 服务降级 服务降级是从整个系统B的负荷情况出发和考虑的&#xff0c;对某些负荷会比较高的情况&#xff0c;为了预防某些功能&#xff08;业务场景&#xff09;出现负荷过载或者响应慢的情况&#xff0c;在B其内部暂时舍弃对一…

【Mybatis编程:统计相册表中的数据的数量】

目录 1. 书写SQL语句 2.在AlbumMapper.java接口中添加抽象方法 3. 在AlbumMapper.xml中配置SQL语句 4. 在AlbumMapperTests.java中编写并执行测试 1. 书写SQL语句 需要执行的SQL语句大致是&#xff1a; select count(*) from pms_album 在设计抽象方法时&#xff0c;如果要…

【三维重建补充知识-0】视差、深度概念及其转换

一、基本概念 把手指放在眼前&#xff0c;分别闭上左、右眼&#xff0c;我们会发现手指与后边物体的相对位置是不同的&#xff0c;也即两眼所识别的两幅图像之间存在视觉差异&#xff0c;我们通过“视差”这一概念来表示这种差别。 该过程也可以通过两个处于同一平面的相机来模…

Ajax学习:Ajax请求基本操作

点击按钮&#xff0c;发送请求&#xff08;前端页面和服务端页面信息交流 但是不刷新页面&#xff09; 注意使用谷歌浏览器 服务器端打开&#xff1a;使用nodemon //1、导入express const expressrequire(express) //2、创建应用对象 创建web服务器 const appexpress() //3、…

软考高级系统架构师_计算机组成与结构02_高速缓存_磁盘结构_输入输出技术_总线结构_可靠性_---软考高级系统架构师005

1.Cache是Cpu与主存储器之间的速度比主存储器要块10倍左右,因为cpu用的说主存储器中的地址, 而cpu速度很快,主存储器速度慢,所以中间加了这个cache,那么这里就涉及到,怎么把cache地址转化成主存储器的地址,cpu使用地址的时候首先访问主存储器地址,但是访问的是cache,所以这个时…