ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

递归方法是什么及如何运用递归绘制简单山体图形

2021-03-07 18:33:45  阅读:160  来源: 互联网

标签:count 递归 int 方法 num 图形 绘制 public


递归方法是什么

递归是一种常见的运用逻辑,简单地用一句话来概括就是:让方法本身调用自己,反复执行方法。用一段简单地代码来表述:

public class Dg{
   public void dg(int count){
         if(count<0){
         return;
         }else{
         System.out.println("这就是递归");
         count--;
         dg(count);
      }
   }
   public static void main(String[] args){
   Dg a=new Dg();
   a.dg(5);
   }
}

上述就是一个非常简单的递归,在方法dg中再一次调用dg方法本身,这样只有在count符合要求的时候,就会一直反复运行方法dg。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。这里注意,在运用递归方法时,一定要加入一个递归次数的判定条件,不能让递归无限循环下去,没有限制的无限循环就会出现栈溢出的问题而报错。

如何如何运用递归绘制简单山体图形

在了解了什么是递归方法后,我们就可以用递归方法来进行一定操作,例如我们现在需要画出一个简单的山体的轮廓,那么具体的步骤就如下:

第一步创建必要的窗体来进行显示

public class Hs{
  public void UI(){
    Repaint jf=new Repaint ();//这里原本应该用的类是JFrame但由于后续会写重绘的方法,最终会用Repaint子类继承JFrame父类
    jf.setSize(800, 800);//设置一些窗体的基本设置
    jf.setLocationRelativeTo(null);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);
  }
  public static void main(String[] args){
    Hs hs=new UI();
    hs.UI();
  }
}

此时就创建好了一个窗体用于后续来显示画出来的山体。

第二步写出画山的递归方法

public void Hs(int x1, int y1, int x2, int y2, int count, int num, double rate, Graphics g){
  int nextx,nexty;
  if(count<0){
  g.drawline(x1,y1,x2,y2);
  }else{
  Random random=new Random();
  int BL=random.nextInt(num*2)-num;//让变量BL随机在某个正负值之间取值
  nextx=x1+(x2-x1)/2;
  nexty=y1+(y2-y1)/2-BL;
  num=(int) (num*rate);//之后不断缩小这个num值,让之后的变量BL区间变小,这样不会让山峰过于陡峭
  count--;
  Hs(x1,y1,nextx,nexty,count,num,rate,g);
  Hs(nextx,nexty,x2,y2,count,num,rate,g);
  }
}

这样我们就完成了运用递归来画简单山体的方法,最后就是需要在重绘方法上调用画山体的方法。

第三步在重绘方法中调用递归画山的方法,让其在窗体上显示

public class Repaint extends JFrame{
  public void paint(Graphics g){
  super.paint(g);
  Hs(0,400,800,500,7,400,0.5,g);
  }
}

在这里插入图片描述

这样就完成了一个简单的山体绘制。

标签:count,递归,int,方法,num,图形,绘制,public
来源: https://blog.csdn.net/yuanrunze/article/details/114490237

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有