Java——递归

一,什么是递归

简单来说,递归就是在方法运行过程中调用自己。比如在绘图过程中先创作一个单元,再自己调用自己(递归),从而实现多个单元组成的新图形。

二,递归的应用实例

  一.谢尔宾斯基三角形

  (1)首先创作一个方法来画出一个三角形(一个单元)

public void drawSherbintriangle(Graphics g, int x, int y, int h, int d) {
       //创建一个画三角形的方法,填入点坐标x,y,三角形的高h,底边长d等基本元素
        Point p0 = new Point(x, y);
        Point p1 = new Point(x + d, y);
        Point p2 = new Point(x + d / 2, y - h);//确定三角形的三个点

        g.drawLine(p0.x, p0.y, p1.x, p1.y);
        g.drawLine(p0.x, p0.y, p2.x, p2.y);
        g.drawLine(p1.x, p1.y, p2.x, p2.y);//画出三角形的三条边
        
        Polygon pon1 = new Polygon();
        pon1.addPoint(p0.x + d / 2, p0.y);
        pon1.addPoint((p1.x + p2.x) / 2, p2.y + h / 2);
        pon1.addPoint((p0.x + p2.x) / 2, p2.y + h / 2);//确定大三角形中间的小三角形
        g.fillPolygon(pon1);//给中间的小三角形填充颜色
}

(2)在画好第一个大三角形后,利用递归的方法(调用自己)来画出其余三个白色三角形对应的单元(注意填入的数据应为小三角形的数据,找好点的坐标后给h和d相应除以2)

   drawSherbintriangle(g, p0.x, p0.y, h / 2, d / 2);//左下方三角形
   drawSherbintriangle(g, (p1.x + p0.x) / 2, p1.y, h / 2, d / 2);//右下方三角形
   drawSherbintriangle(g, (p0.x + p2.x) / 2, (p0.y + p2.y) / 2, h / 2, d / 2);//上方三角形
   

写好之后运行一下

在写好递归后运行,就会发现只画出来左下角的三角形,即第一个递归,这是为什么呢?因为如果没有给递归限制条件的话,递归会一直继续下去,所以陷入死循环,因此,还要加上限制条件。

public void drawSherbintriangle(Graphics g, int x, int y, int h, int d) {
       //创建一个画三角形的方法,填入点坐标x,y,三角形的高h,底边长d等基本元素
        if (h < 50) {
            return;
        }

        //限制条件,当h<50时停止,进入下一个递归

        Point p0 = new Point(x, y);
        Point p1 = new Point(x + d, y);
        Point p2 = new Point(x + d / 2, y - h);//确定三角形的三个点

        g.drawLine(p0.x, p0.y, p1.x, p1.y);
        g.drawLine(p0.x, p0.y, p2.x, p2.y);
        g.drawLine(p1.x, p1.y, p2.x, p2.y);//画出三角形的三条边
        
        Polygon pon1 = new Polygon();
        pon1.addPoint(p0.x + d / 2, p0.y);
        pon1.addPoint((p1.x + p2.x) / 2, p2.y + h / 2);
        pon1.addPoint((p0.x + p2.x) / 2, p2.y + h / 2);//确定大三角形中间的小三角形
        g.fillPolygon(pon1);//给中间的小三角形填充颜色

        drawSherbintriangle(g, p0.x, p0.y, h / 2, d / 2);//左下方三角形
        drawSherbintriangle(g, (p1.x + p0.x) / 2, p1.y, h / 2, d / 2);//右下方三角形
        drawSherbintriangle(g, (p0.x + p2.x) / 2, (p0.y + p2.y) / 2, h / 2, d / 2);//上方
   
}

(3)最后创建一个窗体,再在paint方法中画出此三角形即可得到谢尔宾斯基三角形

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值