java递归浅谈

                      java之递归浅谈
    接触java一段时间了,在我揭开初始对我神秘的面纱之后,我逐渐明了java始终只是一门语言,一种工具,而真正在其身后的后盾是其逻辑思维,是imagination,是idea.之所以会有这样的想法是因为本人接触到了递归的灵活应用。然而提到递归就不能不提到分形,一个做游戏画面必不可少的元素。
    对于递归的定义,一句话简单来说就是为其自身调用自身的方法,抓住其每个变化的初始状态与末尾状态。以最简单的谢尔宾斯三角形为例.
其具体实现代码如下:
public class sanjiao {
//传画布
Graphics g ;
public sanjiao(Graphics g ){
this.g=g;

}
//写递归函数,注意参数最好为double或float,免得丢失精度
public void digui(double x1,double y1,double x2,double y2,int n){
//加个深度限定条件
if (n==0){return ;}
double x3=(x1+x2)/2,y3=(double)(y1-((x2-x1)/2*Math.sqrt(3)));
//画初始的三角形
g.drawLine((int)(x1+x3)/2,(int)(y1+y3)/2,(int)(x2+x3)/2,(int)(y2+y3)/2);
g.drawLine((int)(x1+x2)/2,(int)(y1+y2)/2,(int)(x2+x3)/2,(int)(y2+y3)/2);
g.drawLine((int)(x1+x3)/2,(int)(y1+y3)/2,(int)(x2+x1)/2,(int)(y2+y1)/2);
//调用三个本身的递归函数 注意深度为n-1
digui(x1,y1,(x1+x2)/2,(y1+y2)/2,n-1);
digui((x1+x3)/2,(y1+y3)/2,(x2+x3)/2,(y2+y3)/2,n-1);
digui((x1+x2)/2,(y1+y2)/2,x2,y2,n-1);


}
}
在这里我们不难看出递归的一般模块:public void digui(double  x1,x2, x3, y4,.....xn,int n(深度)){
       if (n==0){return ;}
//由初始参数导出一些必要参数
   double yn=....
//再画初始图形
    g.drawLine (......)
//调用本身递归 深度-1
  digui(xn...... n-1)}
以此模板再来对科赫曲线进行,首先对其算法进行分析 .其为一条线突出一个顶角
首先就自定义两条边的两个坐标,重点只是算出其顶角的坐标值
public class kech {
//传两个不同颜色的画布
Graphics g ;
Graphics g1 ;
public kech(Graphics g1,Graphics g ){
this.g=g;
this.g1=g1;

}
public void digui(int x1,int y1,int x2,int y2,int n){

if(n==0){return;}
//算三角形两个顶角的坐标
    int x3=(x2-x1)/3+x1;
int y3=(y2-y1)/3+y1;
int x4=2*(x2-x1)/3+x1;
int y4=2*(y2-y1)/3+y1;
//算其顶角的坐标
double x5=x1+(x2-x1)/3+((x2-x1)/3)*Math.cos(Math.PI/3)-((y2-y1)/3)*Math.sin(Math.PI/3);
double y5=y1+(y2-y1)/3+((x2-x1)/3)*Math.sin(Math.PI/3)+((y2-y1)/3)*Math.cos(Math.PI/3);



g1.drawLine(x3,y3,x4,y4);
g.drawLine(x1, y1, x3, y3);
g.drawLine((int)x5, (int)y5, x3, y3);
g.drawLine((int)x5, (int)y5, x4, y4);
g.drawLine(x4, y4, x2, y2);
//要对四条边分别进行递归
digui(x1,y1,x3,y3,n-1);
digui(x3,y3,(int)x5,(int)y5,n-1);
digui((int)x5,(int)y5,x4,y4,n-1);
digui(x4,y4,x2,y2,n-1);
    }




}




综上所言,递归要抓住其变化的本质,就是其第一次变化的初始状态与末尾状态。

你可能感兴趣的:(java)