JAVA学习--9.递归

递归

1.概念

​ 当解决一个问题可以分解为对应其相同问题的‘小’一点的问题时,就可以叫做递归。用到函数用,也就是函数本身调用了自己就可以叫做递归。

2.步骤

(1)明确这个函数要干什么

(2)找到等价关系

(3)找到递归结束条件

3.实例

假设我们现在要画一条直线,然后每次都继续在这条直线上面画出他左右都少20个像素的线条,就像画出一个金字塔一样

  • 先新建一个画布
	public void init(){
		JFrame jf = new JFrame();
		jf.setTitle("递归");
		jf.setSize(800,800);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
		
		Graphics g = jf.getGraphics();	
	}
  • 想要在画布上操作,我们需要一个监听器,我们现在新建一个类来实现MouseListener1

    想要在画布上画画,首先我们需要获取鼠标点击的位置和释放的位置,然后画出第一条直线

    public class MouseListener1 implements MouseListener{
    	int x1,x2;
        int y=700;//为了保证‘金字塔’能显示完整
        int dis=10;//每条线之间的距离
        Graphics g;
        
    	@Override
    	public void mousePressed(MouseEvent e) {
    		// TODO Auto-generated method stub
    		x1=e.getX();
    	}
    
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		// TODO Auto-generated method stub
    		x2=e.getX();
    	}
    }
    

现在正式开始我们的递归思路

1.这个函数要干什么

我们知道这个函数是用来画‘金字塔’的,而‘金字塔’又是需要画线的,归根到底他就是用来画线的,那我们先让他画一条线。

	public void draw(int x1,int x2,int y)
	{
		g.drawLine(x1, y, x2, y);
	}

看下效果:

在这里插入图片描述

现在最底层的线就已经画出来拉,然后我们要让他自己去画上面的线

2.寻找等价关系

上面我们说了,每次上面一条线就是要比下面的左右短个20个像素,在他上面高出一个dis的距离

我们可以在函数中加入:

draw(x1+20,x2-20,y-dis);

让我们看下效果:
在这里插入图片描述

这时我们发现,她画出‘金字塔’之后反过来话了到三角,这是因为x2<x1的原因造成的

3.找到递归结束条件

​ 由上可知,递归到x1>x2的时候就不能再继续了,所以我们加上条件

	public void draw(int x1,int x2,int y)
	{
		g.drawLine(x1, y, x2, y);
		if((x1+20)<(x2-20))
		{
			draw(x1+20,x2-20,y-dis);
		}
	}

最终结果:

在这里插入图片描述

我们可以自己调整数据得到不同的图形

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值