16=recursion

Upload: gene-kao

Post on 03-Jun-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/12/2019 16=Recursion

    1/45

    Processing

    16

    Recursion

  • 8/12/2019 16=Recursion

    2/45

    Recursion

  • 8/12/2019 16=Recursion

    3/45

    Recursion

  • 8/12/2019 16=Recursion

    4/45

    1. 2. 3. 4.

  • 8/12/2019 16=Recursion

    5/45

    void A () {

    A;}

    void A () {

    B;}

    void B () {

    C;}

    void C () {

    A;}

    void A () {

    B;}

    void B () {

    A;}

  • 8/12/2019 16=Recursion

    6/45

    voidDebug

    Divide and Conquer

  • 8/12/2019 16=Recursion

    7/45

    void setup () {

    factorial(5);factorial(10);

    factorial(0);

    factorial(1);

    }

    void factorial (int n) {int result = 1;

    if (n == 0) {println(result);} else {

    for (int i = 1; i

  • 8/12/2019 16=Recursion

    8/45

    void setup () {

    int m = factorial(5);

    println(m);

    m = factorial(10);println(m);

    m = factorial(0);

    println(m);

    m = factorial(1);

    println(m);

    }

    int factorial (int n) {

    int result = 1;

    if (n == 0) {return result;} else {

    for (int i = 1; i

  • 8/12/2019 16=Recursion

    9/45

    size(400,400);

    int x = 40;for (int n = 12; n >= 0; n -= 1) {

    line(x, 100, x, 300);

    x += 20;

    }

  • 8/12/2019 16=Recursion

    10/45

    void setup() {

    size(400,400);

    drawLines(40, 12);

    }

    void drawLines(int x, int n) {

    line(x,100, x, 300);

    if (n > 0) {drawLines (x+20, n-1);}

    }

    40,1260,11

    80,10

    300,0

  • 8/12/2019 16=Recursion

    11/45

    size(400,400);

    int x = 40;

    for (int n = 12; n >= 0; n -= 1) {line(x, 100, x, 300);

    x += 20;

    }

    void setup() {

    size(400,400);

    drawLines(40, 12);

    }

    void drawLines(int x, int n) {

    line(x,100, x, 300);

    if (n > 0) {drawLines (x+20, n-1);}

    }

  • 8/12/2019 16=Recursion

    12/45

    void setup() {

    size(400,400);

    drawLines(40, 12);

    }

    void drawLines(int x, int n) {

    line(x,100, x, 300);

    if (n > 0) {drawLines (x+20, n-1);}

    }

    size(400,400);

    int x = 40;

    for (int n = 12; n >= 0; n -= 1) {line(x, 100, x, 300);

    x += 20;

    }

  • 8/12/2019 16=Recursion

    13/45

    void setup() {

    size(400,400);

    drawLines(40, 12);

    }

    void drawLines(int x, int n) {

    line(x,100+x, x, 300-x);

    if (n > 0) {drawLines (x+20, n-1);}

    }

  • 8/12/2019 16=Recursion

    14/45

    void setup () {

    size(400,400);

    background(255);

    ellipseMode(CENTER);

    strokeWeight(2);

    smooth();

    noFill();

    noLoop();

    }

    void draw () {translate(width/2,height/2);

    two_circles(0,width,6);

    }

    void two_circles (float x, float d, int step) {

    ellipse(x,0,d,d);if (step > 1) {

    two_circles(x-d/4,d/2,step-1);

    two_circles(x+d/4,d/2,step-1);

    }

    }

  • 8/12/2019 16=Recursion

    15/45

    void setup() {

    size(400,400);

    background(255);

    ellipseMode(CENTER);

    smooth();noFill();

    noLoop();

    }

    void draw() {

    translate(width/2,height/2);

    ellipse(0,0,width,height);

    int d = width;

    two_circles(0,d);}

    void two_circles(int x, int d) {

    ellipse(x+d/4,0,d/2,d/2);ellipse(x-d/4,0,d/2,d/2);

    }

  • 8/12/2019 16=Recursion

    16/45

    void draw () {

    translate(width/2,height/2);

    two_circles(0,width,6);

    }

    void two_circles (float x, float d, int step) {

    ellipse(x,0,d,d);

    if (step > 1) {

    two_circles(x-d/4,d/2,step-1);two_circles(x+d/4,d/2,step-1);

    }

    }

  • 8/12/2019 16=Recursion

    17/45

    void setup () {

    size(400,400);

    background(255);

    ellipseMode(CENTER);

    strokeWeight(2);

    smooth();noFill();

    noLoop();

    }

    void draw () {

    translate(width/2,height/2);two_circles(0,0,width,6,0);

    }

    void two_circles (float x, float y, float d, int step, int f) {

    fill(f);

    ellipse(x,y,d,d);f += 44;

    if (step > 1) {

    two_circles(x-d/4,y,d/2,step-1,f);

    two_circles(x+d/4,y,d/2,step-1,f);

    }

    }

  • 8/12/2019 16=Recursion

    18/45

    void setup () {

    size(400,400);

    background(255);

    ellipseMode(CENTER);

    smooth();

    noFill();noLoop();

    }

    void draw () {

    translate(width/2,height/2);

    four_circles(0,0,width,5);}

    void four_circles (float x, float y, float d, int

    step) {

    ellipse(x,y,d,d);

    if (step > 1) {four_circles(x-d/4,y,d/2,step-1);

    four_circles(x+d/4,y,d/2,step-1);

    four_circles(x,y-d/4,d/2,step-1);

    four_circles(x,y+d/4,d/2,step-1);

    }

    }

  • 8/12/2019 16=Recursion

    19/45

    void setup () {

  • 8/12/2019 16=Recursion

    20/45

    void setup () {

    size(400,400);

    background(255);

    ellipseMode(CENTER);

    smooth();

    noFill();

    }

    void draw () {

    background(255);

    translate(width/2,height/2);

    int level = int(map(mouseX,0,width,0,8));four_circles(0,0,width,level);

    }

    void four_circles (float x, float y, float d, int

    step) {

    ellipse(x,y,d,d);if (step > 1) {

    four_circles(x-d/4,y,d/2,step-1);

    four_circles(x+d/4,y,d/2,step-1);

    four_circles(x,y-d/4,d/2,step-1);

    four_circles(x,y+d/4,d/2,step-1);

    }}

  • 8/12/2019 16=Recursion

    21/45

  • 8/12/2019 16=Recursion

    22/45

    void setup() {

    size(400,400);

    rectMode(CENTER);

    translate(width/2,height/2);

    drawBoxes(0, 0, 120, 5);

    }

    void drawBoxes(float x, float y, float len, int n) {

    rect(x, y, len, len);

    if (n > 0) {

    drawBoxes(x+len*0.75,y+len*0.75,len/2,n-1);

    }}

  • 8/12/2019 16=Recursion

    23/45

    void setup() {

    size(400,400);

    background(30);

    rectMode(CENTER);

    noStroke();

    translate(width/2,height/2);

    drawBoxes(0, 0, 120, 8);}

    void drawBoxes(float x, float y, int len, int n) {

    rect(x, y, len, len);

    if (n > 0) {

    drawBoxes(x+len*0.75,y+len*0.75,len/2, n-1);drawBoxes(-(x+len*0.75),y+len*0.75,len/2, n-1);}

    }

  • 8/12/2019 16=Recursion

    24/45

  • 8/12/2019 16=Recursion

    25/45

  • 8/12/2019 16=Recursion

    26/45

    3 7

  • 8/12/2019 16=Recursion

    27/45

  • 8/12/2019 16=Recursion

    28/45

    void setup() {

    size(400,400);

    background(30);

    rectMode(CENTER);

    noStroke();

    translate(width/2,height-60);

    drawBoxes(0, 0, 120, 8);}

    void drawBoxes(float x, float y, int len, int n) {

    rect(x, y, len, len);

    if (n > 0) {

    drawBoxes(x+len*0.75,y-len*0.75,len/2, n-1);drawBoxes(-(x+len*0.75),y-len*0.75,len/2, n-1);}

    }

  • 8/12/2019 16=Recursion

    29/45

    float s = 0.85;

    void setup() {

    size(400,400);background(30);

    rectMode(CENTER);

    noStroke();

    translate(width/2,height/2);

    drawBoxes(0, 0, 120,5);

    }

    void drawBoxes(float x, float y, int len, int n) {

    rect(x, y, len, len);

    if (n > 0) {

    drawBoxes(x+len*s,y+len*s,len/2, n-1);

    drawBoxes(-(x+len*s),y+len*s,len/2, n-1);drawBoxes(x+len*s,y-len*s,len/2, n-1);

    drawBoxes(-(x+len*s),y-len*s,len/2, n-1);}

    }

  • 8/12/2019 16=Recursion

    30/45

    void setup() {

    size(400,400);

    background(30);ellipseMode(CENTER);

    noStroke();

    smooth();

    translate(width/2,height/2);

    drawBoxes(0, 0, 200,5);

    }

    void drawBoxes(float x, float y, int len, int n) {

    ellipse(x, y, len, len);

    if (n > 0) {

    drawBoxes(x+len*0.5,y+len*0.5,len/2, n-1);

    drawBoxes(-(x+len*0.5),y+len*0.5,len/2, n-1);drawBoxes(x+len*0.5,y-len*0.5,len/2, n-1);

    drawBoxes(-(x+len*0.5),y-len*0.5,len/2, n-1);}

    }

    i (400 400)

  • 8/12/2019 16=Recursion

    31/45

    size(400,400);

    smooth();

    int len = 100;

    translate(width/2,height/2);

    rect(0,0,len,len);

    line(0,0,len,len);

    translate(len,len);rotate(PI/2);

    rect(0,0,len/2,len/2);

    line(0,0,len/2,len/2);

    translate(len/2,len/2);

    rotate(PI/2);

    rect(0,0,len/4,len/4);

    line(0,0,len/4,len/4);

  • 8/12/2019 16=Recursion

    32/45

    void setup() {

    size(200,323);

    rectMode(CORNER);smooth();

    noLoop();

    }

    void draw () {

    golden(200,10);}

    void golden(float len,int n) {

    rect(0,0,len,len);

    line(0,0,len,len);

    translate(len,len);rotate(PI/2);

    if (n > 0) {golden(len/1.6181, n-1);}//1.61803399...

    }

  • 8/12/2019 16=Recursion

    33/45

    void setup() {

    size(200,323);

    rectMode(CORNER);smooth();

    noLoop();

    }

    void draw () {

    golden(200,10);}

    void golden(float len,int n) {

    rect(0,0,len,len);

    //line(0,0,len,len);

    translate(len,len);rotate(PI/2);

    if (n > 0) {golden(len/1.6181, n-1);} //1.61803399...

    }

  • 8/12/2019 16=Recursion

    34/45

    void setup() {

    size(200,323);

    rectMode(CORNER);

    noFill();

    smooth();noLoop();

    }

    void draw () {

    golden(200,10);

    }

    void golden(float len,int n) {

    rect(0,0,len,len);

    pushMatrix();

    translate(0,len);

    arc(0,0,len*2,len*2,-PI/2,0);popMatrix();

    translate(len,len);

    rotate(PI/2);

    if (n > 0) {golden(len/1.6181, n-1);} //1.61803399...

    }

  • 8/12/2019 16=Recursion

    35/45

    void setup() {

    size(600,600);

    rectMode(CORNER);

    noFill();

    smooth();

    noLoop();

    }

    void draw () {

    translate(width/4,height/2);

    golden(1,12);}

    void golden(float len,int n) {

    rect(0,0,len,len);

    pushMatrix();

    translate(0,len);arc(0,0,len*2,len*2,-PI/2,0);

    popMatrix();

    translate(len,len);

    rotate(PI/2);

    if (n > 0) {golden(len*1.6181, n-1);}

    }

  • 8/12/2019 16=Recursion

    36/45

    void setup() {

    size(600,600);

    rectMode(CORNER);

    noFill();

    smooth();

    noLoop();

    }

    void draw () {

    translate(width/4,height/2);

    golden(1,12);

    }

    void golden(float len,int n) {

    rect(0,0,len,len);

    //pushMatrix();

    //translate(0,len);//arc(0,0,len*2,len*2,-PI/2,0);

    //popMatrix();

    translate(len,len);

    rotate(PI/2);

    if (n > 0) {golden(len*1.6181, n-1);}

    }

  • 8/12/2019 16=Recursion

    37/45

    void setup() {

    size(600,600);rectMode(CORNER);

    noFill();

    smooth();

    noLoop();

    }

    void draw () {

    translate(width/7,height/2);

    golden(10,6);

    }

    void golden(float len,int n) {

    rect(0,0,len,len);

    translate(len,len);

    rotate(PI/2);

    if ((n % 2) == 1) {scale(1.618,1);}

    else {scale(1,1.618);}if (n > 0) {golden(len*1.6181, n-1);}}

  • 8/12/2019 16=Recursion

    38/45

  • 8/12/2019 16=Recursion

    39/45

  • 8/12/2019 16=Recursion

    40/45

  • 8/12/2019 16=Recursion

    41/45

    int p1x = 50; int p1y = 0;

    int p2x = 0; int p2y = 100;

    int p3x = 100; int p3y = 100;

    float p0x = 100.0; float p0y = 50.0;

    void setup () {

    size(100,100);

    background(255);

    Serpinsky(p0x, p0y, 0);

    }

    void Serpinsky(float x, float y, int n) {

    int i = int(random(3));

    if (i == 1) {x = (x + p1x) / 2.0; y = (y + p1y) / 2.0;}

    if (i == 2) {x = (x + p2x) / 2.0; y = (y + p2y) / 2.0;}if (i == 0) {x = (x + p3x) / 2.0; y = (y + p3y) / 2.0;}

    point(x,y);

    if (n != 4000) {Serpinsky(x,y,n + 1);}

    }

  • 8/12/2019 16=Recursion

    42/45

  • 8/12/2019 16=Recursion

    43/45

    float angle = 45;

    float first_line = 200;

    void setup() {

    size(400,400);

    translate(width/2,height);

    line(0,0,0,-first_line);

    drawLines(0,-first_line,40,90,5);

    }

    void drawLines(float x1,float y1,float len,float an,int n) {

    float x2 = x1 + cos(radians(an)) * len;

    float y2 = y1 - sin(radians(an)) * len;

    line(x1, y1, x2, y2);if (n > 0) {drawLines(x2,y2,len*0.9,angle,n-1);

    drawLines(x2,y2,len*0.9,90+angle,n-1);}

    }

  • 8/12/2019 16=Recursion

    44/45

    float angle = 30;

    float first_line = 180;

    void setup() {

    size(400,400);

    translate(width/2,height);

    line(0,0,0,-first_line);

    drawLines(0,-first_line,40,90,8);

    }

    void drawLines(float x1,float y1,float len,float an,int n) {

    float x2 = x1 + cos(radians(an)) * len;

    float y2 = y1 - sin(radians(an)) * len;

    line(x1, y1, x2, y2);if (n > 0) {drawLines(x2,y2,len*0.9,angle,n-1);

    drawLines(x2,y2,len*0.9,90+angle,n-1);}

    }

  • 8/12/2019 16=Recursion

    45/45

    Ch. 22P201-204