Download - CS102 – Recursion
![Page 2: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/2.jpg)
What is Recursion? Method of solving problems
Alternative to iteration All recursive solutions
can be implemented iteratively
Characteristic... recursive methods call themselves
recursive functions defined in terms of (simpler versions) themselves
General recursive case & stopping cases
![Page 3: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/3.jpg)
Factorial N Iterative
N! = N * N-1 * N-2 … 2 * 1
Recursive 1! = 1 - stopping case N! = N * (N-1)! - general case
implement & trace in Java
![Page 4: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/4.jpg)
So, why use recursion? Advantages...
Interesting conceptual framework Intuitive solutions to difficult problems
But, disadvantages... requires more memory & time requires different way of thinking!
![Page 5: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/5.jpg)
Towers of Hanoi The Problem…
Rules only move one disk at a time can’t put a disk on a smaller one
Monks believed world would end once solved for 64 disks!
Takes 580 billion years! at one move per sec.
![Page 6: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/6.jpg)
Print reverse Print first N values in reverse
Simple iterative solution… Recursive?
Hint - what is the simplest case? Write out sequence of cases
& look for previous case within each casegeneralise & note stopping case!
5 7 2 6 3Given... print...
3, 6, 2, 7, 5
![Page 7: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/7.jpg)
Print reverse - solution Solution form
5 7 2 6 3
N’thN-1
To print N values in reverse order if N > 0
Print the N’th value& thenPrint the preceding N-1 values in reverse order
Write Java & trace
![Page 8: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/8.jpg)
Print forward Print set of values in normal order Solution form
5 7 2 6 3
N’thN-1
To print N values in normal order if N > 0
Print the first N-1 values in normal order& thenPrint the N’th value
Write Java & trace
![Page 9: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/9.jpg)
Print – alternative solution Print set of values in order Alternative solution
5 7 2 6 3
To print values btw S & E in order if S <= E
Print the value at S& thenPrint the values btw S+1 & E in order
Write Java & tracefirst S rest E
![Page 10: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/10.jpg)
Summation Find the sum of the first N values
5 7 2 6 3
N’thN-1
To sum first N values of X if N = 0
return 0 else
return N´th value + sum of preceding N-1 values
![Page 11: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/11.jpg)
Summation 2 Find sum of all values before sentinel (-1)
5 7 2 -1 3
first rest
![Page 12: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/12.jpg)
Counting Count number of values before zero
5 7 2 0 3
count no. values before zero starting at S if value at S is zero
return 0 else
return 1 + count no. values starting at S+1
restfirst S
Zero is sentinel value& so is guaranteed to exist.This is a common form of representation for strings!
![Page 13: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/13.jpg)
Common mistakes! (1)
sum = 0;
public void count( int[] X, int S) { if ( X[S] != 0) {
sum++;count( X, S+1);
}}
Problems:• Need another method to getCount()• What happens if called again?
![Page 14: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/14.jpg)
Common mistakes! (2)
public int count( int[] X, int S) { int sum; if ( X[S] == 0)
return sum; else {
sum++;return count( X, S+1);
}}
Problem:• New instance of local variable for each instantiation!
![Page 15: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/15.jpg)
Find Max Find max of first N values
5 7 2 6 3
To find max of N values if N = 1
return N’th value else
return greater of N’th & max of preceding N-1 values
N’thN-1
Think about solution in terms of
these two sub-problems
![Page 16: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/16.jpg)
SEARCHING & SORTING
![Page 17: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/17.jpg)
Sequential search
5 7 2 6 3
Search( first N values of X for target) if N = 0
return not found else if N’th value is target
return found at N’th else
return search( first N-1 values of X for target)
N’thN-1
Think about simplest cases of problem & more
general solution in terms of these two
sub-problems
O(N)O(N)
![Page 18: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/18.jpg)
Binary Search
• Think about using telephone directory• Values must be in order!• Have knowledge of data distribution• If unknown? (number guessing game)
1 2 3 5 6 7 9second halffirst half
middleS E
O(log2N)O(log2N)
![Page 19: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/19.jpg)
Binary Search (continued…)
Search( X btw S & E for target) if S > E
return not found else if ( middle value is target)
return found at middle else if ( target < middle value)
return search( first half of X for target) else
return search( second half of X for target)
First half is S, middle-1
Second half is middle+1, E
![Page 20: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/20.jpg)
Selection sort
5 7 2 6 3
N’thN-1
selectionSort( first N values of X) if N > 1
locOfMax = findmax( first N values of X)exchange N’th value with value at locOfMaxselectionSort( first N-1 values of X)
O(N2)O(N2)
locOfMax
![Page 21: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/21.jpg)
QuickSort
5 7 3 9 2 1 6
pivot
O(Nlog2N)O(Nlog2N)
QuickSort( X btw S & E) if S < E
pivot loc. = partition( X btw S & E)QuickSort( first part of X)
QuickSort( second part of X)
Sort second partSort first part
2 1 3 5 7 9 6
pivot
First part isS to pivot loc.-1Second part ispivot loc.+1 to E
partition
![Page 22: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/22.jpg)
MergeSort
O(Nlog2N)O(Nlog2N)
MergeSort( X btw S & E) if S < E
MergeSort( first half of X) MergeSort( second half of X)
Merge( first & second halves of X)
1 5 7 9 2 3 6
1 2 3 5 6 7 9merge
Merge isthe basis of sequential processing
Sort first halfSort second half
![Page 23: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/23.jpg)
MISC…
![Page 24: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/24.jpg)
Palindrome
R A D A R
lastfirstmiddle
isPalindrome( word) if first >= last
return true else if first char of word != last char of word
return false else
return isPalindrome( middle of word)
![Page 25: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/25.jpg)
BlobCount...
blobCount( x, y) zero
• if x,y outside grid• if x,y is empty
else, one plus blobCount(north)blobCount(east)blobCount(south)blobCount(west)
![Page 26: CS102 – Recursion](https://reader033.vdocuments.site/reader033/viewer/2022061609/568137c3550346895d9f6181/html5/thumbnails/26.jpg)
The plan… Maze & blob counting
Fractals? Recursive-descent-parsing?
…on to data structures (stacks, queues, lists, trees, …)