Tuesday, November 15, 2011

Recursion

So first, here's the program whose stack runneth over:

public class Overflow {
public static void main(String[] args) {
foo();
}
static void foo() {
foo();
}
}
view raw Overflow.java hosted with ❤ by GitHub

Then we added a counter so we could see how far down the rabbit hole goes:

public class Counter {
public static void main(String[] args) {
foo(0);
}
static int foo(int count) {
count = count + 1;
System.out.println(count);
foo(count);
return count;
}
}
view raw Counter.java hosted with ❤ by GitHub

And then limited it so that it wouldn't overflow anymore:

public class Limited {
public static void main(String[] args) {
foo(0);
}
static int foo(int count) {
count = count + 1;
System.out.println(count);
if (count == 11000) {
return count;
}
else {
foo(count);
}
return count;
}
}
view raw Limited.java hosted with ❤ by GitHub

(Of course in recitation these were all named Foo.java)

And then here's a drawing thingy:

public class Drawing1 {
public static void main(String[] args) {
Turtle.setSpeed(1000);
y(10);
}
static void x(int n) {
if (n == 0) {
return;
}
else {
x(n-1);
Turtle.turn(90);
y(n-1);
Turtle.draw(10);
}
}
static void y(int n) {
if (n == 0) {
return;
}
else {
Turtle.draw(10);
x(n-1);
Turtle.turn(-90);
y(n-1);
}
}
}
view raw Drawing1.java hosted with ❤ by GitHub

Which uses Turtle.java

And then here's the one that draws the Sierpinski triangle:

public class Triangle {
public static void main(String[] args) {
Turtle.setSpeed(1000);
x(6);
}
static void x(int n) {
if (n == 0) {
Turtle.draw(3);
return;
}
else {
y(n-1);
Turtle.turn(60);
x(n-1);
Turtle.turn(60);
y(n-1);
}
}
static void y(int n) {
if (n == 0) {
Turtle.draw(3);
return;
}
else {
x(n-1);
Turtle.turn(-60);
y(n-1);
Turtle.turn(-60);
x(n-1);
}
}
}
view raw Triangle.java hosted with ❤ by GitHub

(Oh yeah and check out this comic. The author says he thought of it while trying to write a program to draw a Sierpinski triangle and he kept getting a StackOverflowError. WHAT WAS HE DOING WRONG?)

There will be no recitation Thanskgiving week. I hope everyone has a wonderful Thanksgiving and I will see you in two weeks.

No comments:

Post a Comment