//以下列的輸出範例為參考並完成碎形(請用recursion的方式來寫) import java.util.*; public class Square{ public static Pen p; public static void main(String[] argv){ Scanner input =new Scanner(System.in); System.out.println("Please input a number between 0~15:"); int order=input.nextInt();//設定碎形的遞迴次數,設定在0~15之間,15以上會花很多時間繪圖 if(order>=0&&order<=15){ p=new Pen(); //設定初始order=0的圖片 int x=200,y=100; p.flyTo(x,y); p.runTo(x,y+400); p.runTo(x+400,y+400); p.runTo(x+400,y); p.runTo(x,y); //呼叫迴圈繪圖 painting(x+200,y,order,1); } else System.out.println("Must between 0~15!"); } public static void painting(int x,int y,int order,int now){//1.給定起點的的x,y。2.order初始是總共要做的次數,每畫完一次減1直到畫完。3.now是計算現在是畫第幾次。 //畫完之後return if(order<=0) return; if(now%2==1){//印菱形 p.flyTo(x,y); p.runTo(x-(int)(400/Math.pow(2,(now+1)/2)),y+(int)(400/Math.pow(2,(now+1)/2))); p.runTo(x,y+(int)(400/Math.pow(2,(now+1)/2))*2); p.runTo(x+(int)(400/Math.pow(2,(now+1)/2)),y+(int)(400/Math.pow(2,(now+1)/2))); p.runTo(x,y); //設定下次印方型的起點 painting(x-(int)(400/Math.pow(2,(now+1)/2))/2,y+(int)(400/Math.pow(2,(now+1)/2))/2,order-1,now+1); } else{//印方形 p.flyTo(x,y); p.runTo(x,y+(int)(400/Math.pow(2,now/2))); p.runTo(x+(int)(400/Math.pow(2,now/2)),y+(int)(400/Math.pow(2,now/2))); p.runTo(x+(int)(400/Math.pow(2,now/2)),y); p.runTo(x,y); //設定下次印菱形的起點 painting(400,y,order-1,now+1); } } }