Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS102 – Recursion David Davenport Bilkent University Ankara – Turkey

Similar presentations


Presentation on theme: "CS102 – Recursion David Davenport Bilkent University Ankara – Turkey"— Presentation transcript:

1 CS102 – Recursion David Davenport Bilkent University Ankara – Turkey email: david@bilkent.edu.tr

2 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

3 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

4 So, why use recursion? Advantages... Interesting conceptual framework Intuitive solutions to difficult problems But, disadvantages... requires more memory & time requires different way of thinking!

5 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.

6 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 case generalise & note stopping case! 57263 Given... print... 3, 6, 2, 7, 5

7 Print reverse - solution Solution form 57263 N’th N-1 To print N values in reverse order if N > 0 Print the N’th value & then Print the preceding N-1 values in reverse order Write Java & trace

8 Print forward Print set of values in normal order Solution form 57263 N’th N-1 To print N values in normal order if N > 0 Print the first N-1 values in normal order & then Print the N’th value Write Java & trace

9 Print – alternative solution Print set of values in order Alternative solution 57263 To print values btw S & E in order if S <= E Print the value at S & then Print the values btw S+1 & E in order Write Java & trace first Srest E

10 Summation Find the sum of the first N values 57263 N’th N-1 To sum first N values of X if N = 0 return 0 else return N´th value + sum of preceding N-1 values

11 Summation 2 Find sum of all values before sentinel (-1) 572 3 first rest

12 Counting Count number of values before zero 57203 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!

13 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?

14 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!

15 Find Max Find max of first N values 57263 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

16 SEARCHING & SORTING

17 Sequential search 57263 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)

18 Binary Search Think about using telephone directory Values must be in order! Have knowledge of data distribution If unknown? (number guessing game) 1235679 second halffirst half middle SE O(log 2 N)

19 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

20 Selection sort 57263 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 locOfMax selectionSort( first N-1 values of X) O(N 2 ) locOfMax

21 QuickSort 5739216 pivot O(Nlog 2 N) 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 part Sort first part 2135796 pivot First part is S to pivot loc.-1 Second part is pivot loc.+1 to E partition

22 MergeSort O(Nlog 2 N) MergeSort( X btw S & E) if S < E MergeSort( first half of X) MergeSort( second half of X) Merge( first & second halves of X) 1579236 1235679 merge Merge is the basis of sequential processing Sort first half Sort second half

23 MISC…

24 Palindrome RADAR lastfirst middle isPalindrome( word) if word has < 2 chars return true else if first char of word != last char of word return false else return isPalindrome( middle of word)

25 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)

26 The plan… Blob counting Escaping the Maze Fractals? Recursive-descent-parsing? …& on to data structures (stacks, queues, lists, trees, …)


Download ppt "CS102 – Recursion David Davenport Bilkent University Ankara – Turkey"

Similar presentations


Ads by Google