recursion · what is recursion? ! recursion is the ability for a function to call itself. ! why...
TRANSCRIPT
![Page 1: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/1.jpg)
+
Recursion
![Page 2: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/2.jpg)
+What is recursion?
n Recursion is the ability for a function to call itself.
n Why would we want to call our own function?
![Page 3: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/3.jpg)
+What is recursion?
n Recursion is the ability for a function to call itself.
n Why would we want to call our own function?
n Here's an example of a recursive function:
n void recursiveCount(int start) { println(start); recursiveCount(start+1); }
![Page 4: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/4.jpg)
+What is recursion?
n Recursion is the ability for a function to call itself.
n Why would we want to call our own function?
n Here's an example of a recursive function:
n void recursiveCount(int start) { println(start); recursiveCount(start+1); }
n What does it do?
![Page 5: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/5.jpg)
+Iteration vs. Recursion
n Here's a simlar iterative function:
n void iterativeCount(int start) { while(true) { println(start++); } }
![Page 6: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/6.jpg)
+Iteration vs. Recursion
n Here's a simlar iterative function:
n void iterativeCount(int start) { while(true) { println(start++); } }
n How does the above compare to:
n void recursiveCount(int start) { println(start); recursiveCount(start+1); }
![Page 7: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/7.jpg)
+Okay, so what is it good for?
![Page 8: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/8.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
![Page 9: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/9.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
n For example how do you get 5! (five factorial)? n simple, that's just 5 x 4 x 3 x 2 x 1
![Page 10: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/10.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
n For example how do you get 5! (five factorial)? n simple, that's just 5 x 4 x 3 x 2 x 1
n What about 30! ?
![Page 11: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/11.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
n For example how do you get 5! (five factorial)? n simple, that's just 5 x 4 x 3 x 2 x 1
n What about 30! ? n still simple, that's just 30 x 29 x … x 2 x 1
![Page 12: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/12.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
n For example how do you get 5! (five factorial)? n simple, that's just 5 x 4 x 3 x 2 x 1
n What about 30! ? n still simple, that's just 30 x 29 x … x 2 x 1
n What about N! ?
![Page 13: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/13.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
n For example how do you get 5! (five factorial)? n simple, that's just 5 x 4 x 3 x 2 x 1
n What about 30! ? n still simple, that's just 30 x 29 x … x 2 x 1
n What about N! ? n Let's use a loop (iteration).
![Page 14: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/14.jpg)
+Okay, so what is it good for?
n Solving problems by breaking them into smaller pieces.
n For example how do you get 5! (five factorial)? n simple, that's just 5 x 4 x 3 x 2 x 1
n What about 30! ? n still simple, that's just 30 x 29 x … x 2 x 1
n What about N! ? n Let's use a loop (iteration).
n We could also use recursion.
![Page 15: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/15.jpg)
+Recursion – Key idea
n Keep delegating until the problem is very simple.
n In other words n do a simpler task each time you call yourself
n until the task would cause no change (the base case).
![Page 16: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/16.jpg)
+N! recursive definition
n Recursive case: n N! is N * (N-1)!
n Base case: n 0! is 1
n Note: N-1 is a simpler/smaller version of the problem for factorial to act upon.
![Page 17: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/17.jpg)
+N! recursive definition
n Recursive case (let's break this down): n M = N-1;// make the problem smaller
n smallerFact = M! // call factorial on the smaller problem
n return N * smallerFact; // return result of simple multiplication.
n Base case (if N == 0): n return 1;
n Note: N-1 is a simpler/smaller version of the problem for factorial to act upon.
![Page 18: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/18.jpg)
+N! recursive definition
n Recursive case: n N! is N * (N-1)!
n Base case: n 0! is 1
n So, what does this mean for 5!?
n How could we write a function to capture these 2 cases?
![Page 19: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/19.jpg)
+
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
6. int factorial(int N) { 7. if (N == 1) { 8. return 1; 9. } else { 10. int F = N * factorial(N-1); 11. return F; 12. } 13. }
Factorial – Recursive Implementation
Trace it.
![Page 20: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/20.jpg)
+Last In First Out (LIFO) Stack of Plates
![Page 21: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/21.jpg)
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
![Page 22: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/22.jpg)
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
![Page 23: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/23.jpg)
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
![Page 24: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/24.jpg)
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
![Page 25: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/25.jpg)
1. int factorial(int N=5) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
![Page 26: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/26.jpg)
1. int factorial(int N=5) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
![Page 27: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/27.jpg)
1. int factorial(int N=5) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
![Page 28: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/28.jpg)
1. int factorial(int N=4) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
![Page 29: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/29.jpg)
1. int factorial(int N=4) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
![Page 30: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/30.jpg)
1. int factorial(int N=4) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
![Page 31: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/31.jpg)
1. int factorial(int N=3) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
![Page 32: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/32.jpg)
1. int factorial(int N=3) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
![Page 33: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/33.jpg)
1. int factorial(int N=3) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
![Page 34: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/34.jpg)
1. int factorial(int N=2) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
![Page 35: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/35.jpg)
1. int factorial(int N=2) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
![Page 36: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/36.jpg)
1. int factorial(int N=2) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
factorial() N=2, Line=5
![Page 37: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/37.jpg)
1. int factorial(int N=1) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
factorial() N=2, Line=5
![Page 38: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/38.jpg)
1. int factorial(int N=1) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
factorial() N=2, Line=5
![Page 39: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/39.jpg)
1. int factorial(int N=2) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N * 1; 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
factorial() N=3, Line=5
![Page 40: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/40.jpg)
1. int factorial(int N=3) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N * 2; 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
factorial() N=4, Line=5
![Page 41: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/41.jpg)
1. int factorial(int N=4) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N * 6; 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
factorial() N=5, Line=5
![Page 42: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/42.jpg)
1. int factorial(int N=5) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N * 24; 6. return F; 7. } 8. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
setup() A=10, Line=3
![Page 43: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/43.jpg)
1. void setup() { 2. int A = 10; 3. int B = 120; 4. println( B ); 5. }
1. void setup() { 2. int A = 10; 3. int B = factorial(5); 4. println( B ); 5. }
1. int factorial(int N) { 2. if (N == 1) { 3. return 1; 4. } else { 5. int F = N *
factorial(N-1); 6. return F; 7. } 8. }
Call Stack Executing Function Compiled Code
![Page 44: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/44.jpg)
+The Call Stack keeps track of …
1. all functions that are suspended, in order
2. the point in the function where execution should resume after the invoked subordinate function returns
3. a snapshot of all variables and values within the scope of the suspended function so these can be restored upon continuing execution
![Page 45: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/45.jpg)
+What happens if there is no stopping condition, or "base case"?
![Page 46: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/46.jpg)
+Recursive Drawing
n Draw a shape, then recursively draw a smaller version of the shape.
n Examples: n drawCircles
n drawSquares
![Page 47: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/47.jpg)
+Creating a maze, recursively 1. Start with a rectangular region defined by its upper left
and lower right corners
2. Divide the region at a random location through its more narrow dimension
3. Add an opening at a random location
4. Repeat on two rectangular subregions
Inspired by http://weblog.jamisbuck.org/2011/1/12/maze-generation-recursive-division-algorithm
![Page 48: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/48.jpg)
![Page 49: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/49.jpg)
// RecursiveMaze int N = 25; // Grid dimension int gsize = 20; // Grid size int V = 1; // Vertical constant int H = 2; // Horizontal constant void setup() { // Setup sketch size(N*gsize+1, N*gsize+1); noLoop(); background(255); stroke(0); // Kick off the recursive divide // on entire sketch window divide(0,0,N,N); }
// Determine the direction for dividing // Stop when too small. int divDir(int r1, int c1, int r2, int c2) { int dr = r2 - r1; // Deltas int dc = c2 - c1; if (dr <= 1 || dc <= 1) // Too small return 0; // No division else if (dr < dc) // Flat and wide return V; // Vertical division else // Tall and narrow return H; // Horizontal div } // Return a random integer in the range int randomInt(int min, int max) { return round(random(min-0.5,max+0.5)); } // Draw a line on a grid segment void gridLine(int r1, int c1, int r2, int c2) { line(r1*gsize, c1*gsize, r2*gsize, c2*gsize); }
![Page 50: Recursion · What is recursion? ! Recursion is the ability for a function to call itself. ! Why would we want to call our own function? ! Here's an example of a recursive function:](https://reader033.vdocuments.us/reader033/viewer/2022051811/60205132f29cd757e412ca94/html5/thumbnails/50.jpg)
// Divide the region given upper left and // lower right grid corner points void divide(int r1, int c1, int r2, int c2) { int cr, rr; // Get divide direction (V, H or 0) int dir = divDir(r1, c1, r2, c2); // Divide in vertical direction if (dir == V) { // Wall and opening locations cr = randomInt(c1+1, c2-1); rr = randomInt(r1, r2-1); // Draw wall gridLine(cr,r1,cr,rr); gridLine(cr,rr+1,cr,r2); // Recursively divide two subregions divide(r1,c1,r2,cr); divide(r1,cr,r2,c2);
// Divide in horizontal direction } else if (dir == H) { // Wall and opening locations cr = randomInt(c1, c2-1); rr = randomInt(r1+1, r2-1); // Draw wall gridLine(c1,rr,cr,rr); gridLine(cr+1,rr,c2,rr); // Recursively divide two subregions divide(r1,c1,rr,c2); divide(rr,c1,r2,c2); // No division. We're done. } else { return; } }