首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中的递归Sierpinski三角形?

递归是一种在编程中常用的技术,它允许函数调用自身来解决问题。Sierpinski三角形是一种由三角形组成的图形,它的构造过程可以通过递归来实现。

在Java中,可以使用递归来绘制Sierpinski三角形。下面是一个示例代码:

代码语言:txt
复制
import java.awt.*;
import javax.swing.*;

public class SierpinskiTriangle extends JPanel {
    private int level;

    public SierpinskiTriangle(int level) {
        this.level = level;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        drawSierpinski(g, level, getWidth() / 2, 0, getWidth(), getHeight());
    }

    private void drawSierpinski(Graphics g, int level, int x, int y, int width, int height) {
        if (level == 0) {
            int[] xPoints = {x, x + width / 2, x - width / 2};
            int[] yPoints = {y, y + height, y + height};
            g.fillPolygon(xPoints, yPoints, 3);
        } else {
            int newWidth = width / 2;
            int newHeight = height / 2;
            drawSierpinski(g, level - 1, x, y, newWidth, newHeight);
            drawSierpinski(g, level - 1, x + newWidth, y + newHeight, newWidth, newHeight);
            drawSierpinski(g, level - 1, x - newWidth, y + newHeight, newWidth, newHeight);
        }
    }

    public static void main(String[] args) {
        int level = 5; // 设置递归的层数
        JFrame frame = new JFrame("Sierpinski Triangle");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 800);
        frame.add(new SierpinskiTriangle(level));
        frame.setVisible(true);
    }
}

这段代码使用了Java的绘图库来绘制Sierpinski三角形。在paintComponent方法中,调用drawSierpinski方法来绘制三角形。drawSierpinski方法接受递归的层数作为参数,当递归层数为0时,绘制一个实心三角形;否则,将当前三角形分成三个更小的三角形,并对它们分别进行递归绘制。

这个例子中使用了Java的Swing库来创建窗口和绘制图形。你可以将代码复制到一个Java项目中,并运行它来查看Sierpinski三角形的效果。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,这里无法给出相关链接。但你可以通过访问腾讯云官方网站,查找与云计算相关的产品和服务。腾讯云提供了丰富的云计算解决方案,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

附加实验1 Sierpinski三角形

3.实验原理:     Sierpinski三角形是一种分形图形,它是递归地构造的。...最常见的构造方法如下图所示:把一个三角形分成四等份,挖掉中间那一份,然后继续对另外三个三角形进行这样的操作,并且无限地递归下去。...每一次迭代后整个图形的面积都会减小到原来的3/4,因此最终得到的图形面积显然为0。这也就是说,Sierpinski三角形其实是一条曲线。 ? 图1 大概在下图上标注了一下一个三角形迭代过程: ?...图2 生成Sierpinski 三角形算法描述,如图1所示: (1)从一个三角形开始; (2)连接三边的中点并去掉中间的三角形; (3)重复上述过程; 4.示范代码: #include <GL/glut.h...GLUT_RGB);     glutInitWindowSize(500, 500);     glutInitWindowPosition(50,50);     glutCreateWindow("2D Sierpinski

60420

【我和Python算法的初相遇】——体验递归的可视化篇

这导致了一些数学家开始研究递归函数,因为递归函数是一种强大的工具,可以用来刻画数学中的可计算性概念。在20世纪40年代,递归理论被广泛研究,它为计算机科学的发展奠定了基础。...今天,递归算法被广泛用于计算机科学中的许多应用领域,如数据结构设计、图像处理、机器学习和自然语言处理。 什么是递归?...递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。 递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出奇简单令人赞叹。...问题: 给定一个列表,返回所有数的和列表中数的个数不定,需要一个循环和一个累加变量来迭代求和 def Listsum(nl): sum = 0 for i in nl:...—— 我们通过递归可以将复杂问题简单化,并且我们还学习了如何通过递归进行进制转换,以及如何通过递归去画出我们想要的图形---螺旋图,分形树,谢尔基三角形。

30410
  • java中的递归算法_java递归算法详解

    大家好,又见面了,我是你们的朋友全栈君。 Java中的递归算法虽然简单,但想要精通也是有着一定的难度的,本篇文章我们就来详细了解下递归算法。 什么是递归?...一般的说, 递归算法是一种直接或间接地调用自身的算法。在程序中,递归算法能够使算法的描述简洁而且易于理解。 递归分几类? 递归通常分为两类,直接递归和间接递归: 1、直接递归称为方法自身调用自己。...2、间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。 递归怎么实现实现?...static int getSum(int num) { if (num == 1) { return 1; } return num + getSum(num – 1); } } 以上就是本篇文章的所有内容...,更多详细java入门敬请关注奇Q工具网了解详情。

    1.6K20

    Python 分形算法__代码里开出来的数学之花

    前言 分形几何是几何数学中的一个分支,也称大自然几何学,由著名数学家本华曼德勃罗( 法语:BenoitB.Mandelbrot)在 1975 年构思和发展出来的一种新的几何学。...分形几何是对大自然中微观与宏观和谐统一之美的发现,分形几何最大的特点: 整体与局部的相似性:一个完整的图形是由诸多相似的微图形组成,而整体图形又是微图形的放大。 局部是整体的缩影,整体是局部的放大。...2.3 谢尔宾斯基三角形 谢尔宾斯基三角形(英语:Sierpinski triangle)由波兰数学家谢尔宾斯基在1915年提出。 构造过程: 取一个实心的三角形(最好是等边三角形)。...(*pos): # 画三角形 draw_triangle(pos) p1, p2, p3 = pos # 在三角形中任取一点 ran_x, ran_y = (p1...2.4 分形树 绘制分形树对于递归调用过程的理解有很大的帮助,其实前面所聊到的递归算法都是树形递进。分形树能很形象的描述树形递归的过程。

    1.3K20

    Python编程 深入浅出递归

    递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。 递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出奇简单,令人赞叹。...给定一个列表,返回所有数的和,列表中数字的个数不定,需要一个循环和一个累加变量来迭代求和,那现在既不能用 for 循坏,也不能用 while 循环,我们可以用递归的方法来解决问题!...python中的 turtle 的使用,可以很方便地画出分形树,画分形树的思想也可以用到二叉树的遍历中,实现如下: def draw_tree(branch_len): if branch_len...谢尔宾斯基三角形(英语:Sierpinski triangle)也是一种分形,由波兰数学家谢尔宾斯基在 1915 年提出,它是自相似集的例子。...同时,这 3 个 degree=n-1 的三角形边长均为degree=n的三角形的一半(规模减小)。当degree=0,则就是一个等边三角形,这是递归基本结束条件。

    44010

    Python面试算法:绘制谢尔宾斯基三角形

    所以我们只需要绘制除了6级三角形外的其他三角形中三个角的小三角形即可。由于每一个三角形都会重复同一个动作(绘制三个更小的三角形),这明显是递归动作。...递归的基本流程如下: step1:绘制大三角形 step2:绘制大三角形中三个顶点的小三角形 step3:重复step1,将大三角形看做step2绘制的小三角形,继续绘制这个小三角形中三个顶点的小三角形...,直到级别为6为止(最小的三角形),这是递归终止条件。...# points表示当前绘制的大三角形的三个顶点,degree表示当前的度,或者级别,必须大于0,才继续绘制,myTurtle是还会作图对象 def sierpinski(points,degree,...myTurtle): colormap = ['blue','red','green','yellow','white','orange'] # 绘制大三角形,从颜色列表中根据degree

    1.3K20

    Java中的递归详解

    文章目录 概述 递归累加求和 计算1 ~ n的和 代码执行图解 递归求阶乘 递归打印多级目录 综合案例 文件搜索 文件过滤器优化 Lambda优化 概述 递归:指在当前方法内调用自己的这种现象。...("a方法"); a(); } } 递归累加求和 计算1 ~ n的和 分析:num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用。...递归求阶乘 阶乘:所有小于及等于该数的正整数的积。 n的阶乘:n!...printDir(file); } } } } 综合案例 文件搜索 搜索D:\aaa 目录中的.java 文件。...保留规则: 要么是.java文件。 要么是目录,用于继续遍历。 通过过滤器的作用,listFiles(FileFilter)返回的数组元素中,子文件对象都是符合条件的,可以直接打印。

    91920

    java递归和迭代_Java中的迭代与递归

    尤其是遇到一个比较复杂的场景的时候。但是,代码的难以了解带来的有点也比较显著。迭代的效率比递归要高,并且在空间消耗上也比较小。 递归中肯定有迭代,但是迭代中不肯定有递归,大部分可以相互转换。...能用迭代的不要用递归,递归调用函数不仅白费空间,假如递归太深的话还容易造成堆栈的溢出。 数形递归 前面详情过,树递归随输入的增长的信息量呈指数级增长。...比较典型的就是斐波那契数列: 用文字形容就是斐波那契数列中前两个数字的和等于第三个数字:0,1,1,2,3,5,8,13,21…… 递归实现代码如下: int fib (int n) { if (...== 0) { return 0; } else if (n == 1) { return 1; } else { return fib(n-1) + fib(n-2); } } 计算过程中,...但是这并不表明递归可以完全被取代。由于递归有更好的可读性。 ?为了让学习变得轻松、高效,今天给大家免费分享一套Java教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。

    2.1K40

    java中递归算法_java中递归算法是什么怎么算的?

    大家好,又见面了,我是你们的朋友全栈君。 展开全部 一、递归算法基本思路: Java递归算法是基于Java语言实现的递归算法。...递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。...递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。...所以不提倡用递归设计程序。 【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。...factorial=new Factorial(); System.out.println(“factorial(5)=”+factorial.fact(5)); } } 代码执行流程图如下: 此程序中n

    1.4K30

    递归求数组的和_java递归教程

    此时可以完成递归功能。总之,递归就是在某个函数的执行过程中首先判断它的终止条件参数,终止条件参数满足终止条件则执行完毕,终止条件参数不满足终止条件则调用它自身执行某项运算,比如这里求和就是执行加法。...凡是递归一定都有一个参数作为终止条件,比如这里是数组中未加入求和队列的元素个数,初始为数组长度。...因为终止条件参数的初始值为数组长度,所以从数组的最后一个元素作为求和队列的第一个元素开始,每递归一次就将数组中的一个元素划归到求和队列中,同时将终止条件参数减1,直到其未为0,标明所有元素都已加入求和队列....在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解....; import java.awt.B 本文实例讲述了java实现pdf文件截图的方法.分享给大家供大家参考,具体如下: 最近做的一个网站中,有个需求是上传pdf文件,显示pdf的封页,点击封页之后进行在线阅读

    1.3K40

    在Java中谈尾递归--尾递归和垃圾回收的比较(转载)

    我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所以才会有有意思的东西可写...,另外还有我发现把尾递归如果跟JAVA中的GC比对一下,也颇有一些妙处(发现还没有人特地比较过) (不过后来边写边整理思路,写出来又是另一个样子了) 一、首先我们讲讲递归 递归的本质是,某个方法中调用了自身...比如C实现了,JAVA没有去实现 说到这里你很容易联想到JAVA中的自动垃圾回收机制,同是处理内存问题的机制,尾递归优化跟垃圾回收是不是有什么关系,这是不是就是JAVA不实现尾递归优化的原因?...下面虽然是在说JAVA,但是C也是差不多的 在Java中, JVM中的栈记录了线程的方法调用。每个线程拥有一个栈。...这块内存被占有了却没被使用,这种场景被称之为内存泄露 所以不管是C还是JAVA,最原始的情况,都是需要手动释放堆中的对象,C到现在也是这样,所以你经常需要考虑对象的生存周期,但是JAVA则引入了一个自动垃圾回收的机制

    1.4K50

    Java的递归算法

    简单递归定义 什么叫递归?(先定义一个比较简单的说法,为了理解,不一定对) 递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。...对刚开始接触计算机编程的人而言,这里有递归的一个简单定义:当函数直接或者间接调用自己时,则发生了递归。 递归是一种常见的解决问题的方法,寄把问题逐渐简单化。...递归的基本思想就是“自己调用自己”,一个使用递归技术的方法会直接或间接的调用自己 递归构造包括两个部分: 定义递归头。什么时候不调用自身方法,如果没有头,将陷入死循环 递归体。...其实递归算法很简单,简单点就是自己调用自己的方法,有条件判断什么时候停止! 递归的经典示例 计算阶乘是递归程序设计的一个经典示例。计算某个数的阶乘就是用那个数去乘包括 1 在内的所有比它小的数。...阶乘的一个有趣特性是,某个数的阶乘等于起始数(starting number)乘以比它小一的数的阶乘。例如,factorial(5) 与 5 * factorial(4) 相同。

    62420

    Java方法的递归

    https://www.captainbed.cn/f1 Java方法的递归是指一个Java方法直接或间接地调用自身,以完成重复或嵌套的计算任务。...一、递归的概念 一个方法在执行过程中调用自身, 就称为 “递归”. 递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式. 递归是一种在方法内调用自身的编程技术。...在Java中,递归可以用于解决各种问题,例如计算阶乘、斐波那契数列、遍历树等。但需要注意的是,递归可能会导致栈溢出的错误,因为每次递归调用都会将方法的调用信息存储在栈中。...它在自然界中也有许多出现的现象,例如植物的叶子排列、螺旋壳的形状等都可以用斐波那契数列来描述。...斐波那契数列也有一些有趣的特性,例如当数列中的数字趋近无穷时,相邻两个数字的比值会趋近于黄金分割比例0.618。这个黄金分割比例在艺术和设计中也有广泛的应用。

    7300

    JSTS 中的递归

    什么是递归?根据维基百科的定义,递归是这样描述的:"递归通常用于描述以类似于已显示方式重复对象的过程。例如,当两面镜子相互对着时,产生的图像就是一个很好的例子。"...在 JavaScript/TypeScript 中呢?...在 JavaScript/TypeScript 中,递归是指函数或类型在满足特定条件之前重复调用自身,这可以出现在函数中,即递归函数调用,也可以出现在类型中。...示例假设我们有一个包含文件(File)和文件夹(Folder)的数组,并且我们需要在控制台中显示每个文件(或文件夹)的名称:首先,我们需要创建一个适用于我们递归函数的类型:type Item = {...: Item[]}正如您所见,我们使用了递归,因为我们将 children 的类型设置为 Item[],这意味着创建了一种递归、嵌套的结构。

    29110

    java的递归详细讲解

    在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做“递归”,这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的。...虽然对于很多递归算法都可以由相应的循环迭代来代替,但是对于一些比较抽象复杂的算法不用递归很难理解与实现。 递归分为直接递归和间接递归,就简单分享一下两个小的直接递归。...在思想上递归类似于数学中曾经学过的数学归纳法。 递归的实现: 递归的实现要注意有两点:一个递归的选项和一个非递归的选项,后者成为基础情形(base case)。...基础情形是递归的终结情形,没有基础情形或者处理不好都会导致无穷递归,这是我们不想要的结果。递归实现起来最关键的是处理好基础情形。 结合具体事例在说一下递归回溯的过程。...需要注意的是,这个算法实现思路上简单,但是复杂度并没有降低,还牵扯回溯保存堆栈问题(其实递归的设计尽量避免这种嵌套两个的递归方式(climb(n)中包含climb(n-1)和climb(n-2)),这种操作会使得堆栈开辟空间随着

    7600
    领券