java递归浅谈

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




}

[img]http://dl.iteye.com/upload/attachment/0082/0963/711eb187-080d-35f7-bfaa-b9cf9bdacb88.jpg[/img]


综上所言,递归要抓住其变化的本质,就是其第一次变化的初始状态与末尾状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值