递归
在本方法中调用本方法进行的操作称为递归。
递归的实质是变量作用范围的不断迭代还跳动。在一个方法中,当变量一直不断迭代而没有暂停时,该方法将一直递归。递归的两个重要难点是递归的停止条件和递归的变量作用变化。理解这两个点,那么递归将能实现大多数的图形美!
下面用递归实现立体效果和平面效果的图:
代码如下
public void draw1(Graphics dra,int x,int y,int w,int h,int l) {
if(l<2) {
return;
}
Rect(dra,x,y,w,h,l);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//后一
draw1(dra,x+2*l/3,y+2*l/3,w/3,h/3,l/3);
draw1(dra,x+4*l/3,y+2*l/3,w/3,h/3,l/3);
draw1(dra,x+6*l/3,y+2*l/3,w/3,h/3,l/3);
//后中二
draw1(dra,x+2*l/3,y,w/3,h/3,l/3);
draw1(dra,x+2*l/3+4*l/3,y,w/3,h/3,l/3);
//后三
draw1(dra,x+2*l/3,y-2*l/3,w/3,h/3,l/3);
draw1(dra,x+4*l/3,y-2*l/3,w/3,h/3,l/3);
draw1(dra,x+6*l/3,y-2*l/3,w/3,h/3,l/3);
//中一
draw1(dra,x+l/3,y-l/3+4*l/3,w/3,h/3,l/3);
draw1(dra,x+l/3+4*l/3,y-l/3+4*l/3,w/3,h/3,l/3);
//中二
draw1(dra,x,y+2*l/3,w/3,h/3,l/3);
draw1(dra,x+4*l/3,y+2*l/3,w/3,h/3,l/3);
//中三
draw1(dra,x+l/3,y-l/3,w/3,h/3,l/3);
draw1(dra,x+l/3+4*l/3,y-l/3,w/3,h/3,l/3);
//前一
draw1(dra,x,y+4*l/3,w/3,h/3,l/3);
draw1(dra,x+2*l/3,y+4*l/3,w/3,h/3,l/3);
draw1(dra,x+4*l/3,y+4*l/3,w/3,h/3,l/3);
//前二
draw1(dra,x,y+2*l/3,w/3,h/3,l/3);
draw1(dra,x+4*l/3,y+2*l/3,w/3,h/3,l/3);
//前三
draw1(dra,x,y,w/3,h/3,l/3);
draw1(dra,x+2*l/3,y,w/3,h/3,l/3);
draw1(dra,x+4*l/3,y,w/3,h/3,l/3);
}