Recursion Tessema M. Mengistu Department of Computer Science Southern Illinois University Carbondale tessema.mengistu@siu.edu Room - 3131 1
Outline • What Is Recursion? • Tracing a Recursive Method • Recursive Methods that Return a Value • Recursively Processing an Array • Recursively Processing a Linked List • The Time Efficiency of Recursive Methods 2
Recursion • Repetition is a major feature of many algorithms – Iterative – Recursive • We often solve a problem by breaking it into smaller problems – divide and conquer • When the smaller problems are identical (except for size) – This is called “recursion” • Repeated smaller problems – Until problem with known solution is reached 3
Recursion • Example – factorial of a positive number n fact(4) = 4 * fact(3) = 24 3* fact(2) = 6 2 *fact(1) = 2 fact(1) =1 • In general fact(n) = n* fact(n-1) n-1*fact(n-2) . . . 2*fact(1) 4
Recursion • Recursion is a problem solving process that breaks a problem into identical but smaller problems. • A method that calls itself is a recursive method. • The invocation is a recursive call or recursive invocation. 5
Recursion • Example 6
Design of Recursive Solution • What part of solution can you contribute directly? • What smaller (identical) problem has solution that … – When taken with your contribution – Provides the solution to the original problem • When does process end? – What smaller but identical problem has known solution – Have you reached this problem, or base case? 7
Design Guidelines • Method must receive input value • Must contain logic that involves this input value and leads to different cases • One or more cases should provide solution that does not require recursion – Base case or stopping case • One or more cases must include recursive invocation of method – recursion call 8
Recursive Method the returns a value • Example – Write a recursive method that displays the sum of the first n positive integers – Compute the sum 1 + 2 + . . . + n 9
Design Guidelines • A recursive method that does not check for a base case, or that misses the base case is a logic error – Infinite recursion 10
Tracing Recursive Method • Given recursive countDown method • For 3 11
12
Tracing Recursive Method 13
Tracing Recursive Method • A recursive method uses more memory than an iterative method, in general, because each recursive call generates an activation record. – Results in “stack overflow” – Infinite recursion or large-size problems are the likely causes of this error 14
Display an Array Recursively • Using first element • Using last element 15
Display an Array Recursively • Using the middle element 16
Displaying a Bag Recursively • When implemented with an array 17
Recursively Processing a Linked Chain • Method display , implemented recursively 18
Recursively Processing a Linked Chain • Recursive method to display the linked chain in reverse order 19
Time Efficiency of Recursive Methods • Consider the method countDown() that displays all positive numbers up to n • It has time complexity of 20
Time Efficiency of Recursive Methods • The equation for t(n) is called a recurrence relation – The definition of the function t contains an occurrence of itself • How can we proof t(n) = n? – Proof by induction • Assume t(n-1) = n-1 for n>1 • t(n) = 1+t(n-1) = 1 +n-1 =n • Therefore t(n) = n for n>1 – So countDown() is O(n) 21
Time Efficiency of Computing x n • Recursive calculation for x n • Can be shown • Thus efficiency is O(log n) • Proof – Reading Assignment 22
Simple Solution to a Difficult Problem • Consider Towers of Hanoi puzzle 23
Towers of Hanoi • Rules 1. Move one disk at a time. Each disk you move must be a topmost disk. 2. No disk may rest on top of a disk smaller than itself. 3. You can store disks on the second pole temporarily, as long as you observe the previous two rules. 24
25
26
Solution • Move a disk from pole 1 to pole 3 • Move a disk from pole 1 to pole 2 • Move a disk from pole 3 to pole 2 • Move a disk from pole 1 to pole 3 • Move a disk from pole 2 to pole 1 • Move a disk from pole 2 to pole 3 • Move a disk from pole 1 to pole 3 27
Recursive Solution • To solve for n disks … – Ask friend to solve for n – 1 disks – He in turn asks another friend to solve for n – 2 – Etc. – Each one lets previous friend know when their simpler task is finished 28
3 29
Towers of Hanoi 30
Towers of Hanoi 31
Algorithm Efficiency • Moves required for n disks • We note and conjecture (proved by induction) 32
Algorithm Efficiency • The number of moves required to solve the Towers of Hanoi problem grows exponentially with the number of disks n. – m(n) = O(2 n ) 33
Poor Solution to a Simple Problem • Fibonacci sequence 1, 1, 2, 3, 5, 8, 13, … 34
Poor Solution to a Simple Problem • A recursive solution Note the two recursive calls 35
36
Tail Recursion • When the last action performed by a recursive method is a recursive call • Example: • Repeats call with change in parameter or variable
Indirect Recursion • Consider chain of events – Method A calls Method B – Method B calls Method C – and Method C calls Method A • Mutual recursion – Method A calls Method B – Method B calls Method A 38
Recommend
More recommend