Upload
chrystal-garrison
View
215
Download
1
Embed Size (px)
Citation preview
CS-2852Data StructuresLECTURE 12B
Andrew J. Wozniewicz
Image copyright © 2010 andyjphoto.com
CS-2852 Data Structures, Andrew J. Wozniewicz
Agenda• Recursion– Definition– Examples• Math Functions• Algorithms• Data
– Computability
CS-2852 Data Structures, Andrew J. Wozniewicz
What Is Recursion?
• Recursion, n. see Recursion• Some functional programming
languages don’t have loops (equivalent to imperative looping constructs)
• A function “calls itself” – directly or not
Recursion in computer science is a method where the solution to a problem depends on solutions
to smaller instances of the same problem.
DEFINITION
CS-2852 Data Structures, Andrew J. Wozniewicz
Visual Recursion
Source: Wikipedia
CS-2852 Data Structures, Andrew J. Wozniewicz
Recursion in Mathematics
• By this base case and recursive rule, one can generate the set of all natural numbers
1 is a natural number, and each natural number has a successor, which is also a
natural number.
SET THEORY DEFINITION FOR NATURAL NUMBERS
CS-2852 Data Structures, Andrew J. Wozniewicz
Recursive Function
• fib(0) = 0• fib(1) = 1• fib(n) = fib(n-1) + fib(n-2)
Fibonacci Series0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987…
Leonardo Pisano Bigolloc. 1170 – c. 1250
Liber Abaci(The Book of Calculation)
(the growth of a population of rabbitsunder idealized assumptions)
Leonardo of Pisa, Leonardo Pisano, Leonardo Bonacci, Leonardo Fibonacci, Fibonacci
1.618 – Golden Ratio
CS-2852 Data Structures, Andrew J. Wozniewicz
Fibonacci Numbers BINARY REPRESENTATION
http://mathworld.wolfram.comThe first 511 terms of the Fibonacci sequence represented in binary.
CS-2852 Data Structures, Andrew J. Wozniewicz
Fibonacci Function
1: int fib(int n) {2: if (n==0)3: return 0;4: if (n==1) 5: return 1;6: return fib(n-1) + fib(n-2); 7: }
DEMO!
CS-2852 Data Structures, Andrew J. Wozniewicz
Fibonacci Numbers - Plotted
1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728293031323334353637383940414243444546474849500
1000000000
2000000000
3000000000
4000000000
5000000000
6000000000
7000000000
8000000000
9000000000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 250
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
CS-2852 Data Structures, Andrew J. Wozniewicz
Factorial Function !
1: int fact(int n) {2: if (n==0)3: return 0;6: return n*fact(n-1); 7: }
0! = 1n! = n * (n-1)
CS-2852 Data Structures, Andrew J. Wozniewicz
Greatest Common Divisor
long gcd(long a, long b) { // a > b, b != 0 if (b==0) return a; return gcd(b, a % b);}
EUCLID’S ALGORITHM
CS-2852 Data Structures, Andrew J. Wozniewicz
Recursively Count From n Downto 0
void countDown(int n) { for (int i = n; i >= 0; i--) System.out.print(i);}
void countDown(int n) { System.out.print(i); countDown(n-1);}
void countDown(int n) { System.out.print(n); if (n == 0) return; countDown(n-1);}
9876543210
CS-2852 Data Structures, Andrew J. Wozniewicz
Other Examples of Recursive Algorithms
• Linear search through an array• Binary search in an array
CS-2852 Data Structures, Andrew J. Wozniewicz
Recursive Algorithm Design
• Identify the base case – the small problem that can be solved
directly• Split the big problem into smaller
subproblems– Divide-and-Conquer
• Combine the solutions to the smaller subproblems
CS-2852 Data Structures, Andrew J. Wozniewicz
Tail Recursion
• Occurs when the recursive call is at the “end” of the recursive function.
• The algorithm can usually be rewritten to use (pure) iteration instead.
• Computational Equivalence:– f1() { while(C) { S; }; return Q; }– f2() { if (C) then { S; return f(); } else { return Q; } }
CS-2852 Data Structures, Andrew J. Wozniewicz
Recursion versus Iteration• Both allow to repeat an operation• You can always write a recursive
solution to a problem solvable by iteration.
• The reverse is not necessarily true:– Some recursion problems (non-tail
recursion) cannot be solved by iteration alone.
CS-2852 Data Structures, Andrew J. Wozniewicz
“Proving” Correctness• Verify that the base case is recognized
and solved correctly.• Verify that each recursive case makes
progress towards the base case.• Verify that if all smaller problems are
solved correctly, then the original problem is also solved correctly.
CS-2852 Data Structures, Andrew J. Wozniewicz
Recursive Data Structures
• Linked-List:– Node– Node, Linked-List
• Tree– Node– Left-(Sub) Tree– Right-(Sub)Tree
CS-2852 Data Structures, Andrew J. Wozniewicz
Summary• Recursion– Recursive Functions• Fibonacci• Factorial• Greatest Common Divisor
– Recursive Algorithms• Designing Recursive Algorithms• Recursion versus Iteration• Proving Correctness – by Induction• Tail Recursion
– Recursive Data Structures
Questions?
Image copyright © 2010 andyjphoto.com