Download presentation

Presentation is loading. Please wait.

Published byRashad Drewry Modified over 2 years ago

1
More on Recursion More techniques 1

2
Binary search algorithm Binary searching for a key in an array is similar to looking for a word in dictionary Take the midpoint of the dictionary and see if the key is in the lower half or upper half Pick the half the contains the key and take the midpoint of the half and see which quarter the key is in Repeat the above step until the key is matched or the dictionary cannot be halved any more 2

3
Use helper method Given int[] list and int key You are asked to return – the position of key in the array if matched or – -1 if not matched What additional information do you need to apply the algorithm above? 3

4
/** Use binary search to find the key in the list */ public static int recursiveBinarySearch(int[] list, int key) { int low = 0; int high = list.length - 1; return recursiveBinarySearch(list, key, low, high); // use helper method }// recursiveBinarySearch method /** Use binary search to find the key in the list between list[low] and list[high] */ public static int recursiveBinarySearch(int[] list, int key, int low, int high) { if (low > high) // The list has been exhausted without a match return -1; int mid = (low + high) / 2; if (key < list[mid]) return recursiveBinarySearch(list, key, low, mid - 1); else if (key == list[mid]) return mid; else return recursiveBinarySearch(list, key, mid + 1, high); }// recursiveBinarySearch method 4

5
What is the difference between: public static int recursiveBinarySearch( int[] list, int key){... } and public static int recursiveBinarySearch( int[] list, int key, int low, int high) {... } The first method calls the second method. Is it recursive call? 5

6
Recursion versus iteration Iteration Uses for or while loop for repetition but no recursion Why use recursion? Recursion Recursion achieves repetition without a loop Price paid: memory overhead and run time (Every time a method is called, some space in memory must be reserved or allocated to store the method’s local variables and formal parameters, if any) 6

7
public class NestedCalls { public static void m1() { int m1_x = 1; int m1_y = 2; m2(); // m1 calls m2 } // m1 method public static void m2() { int m2_ = 3; int z = 4; z = m3(); //m2 calls m3 }// m2 method public static int m3() { int m3_x =5; int m3_y = 6; return 1; }//m3 method }//NestedCalls class 7

8
Run NestedCalls.java with Bluej Debugger Observe the stack memory and calling sequences 8

9
Stack frame for m1: m1_x: 1 m1_y: 2 Stack frame for m1: m1_x: 1 m1_y: 2 Stack frame for m1: m1_x: 1 m1_y: 2 Stack frame for m2: m2_x: 3 m2_z: 4 Stack frame for m2: m2_x: 3 m2_z: 4 Stack frame for m3: m3_x: 5 m3_y: 6 Just before calling m2 Just before calling m3 Just before m3 returns View of stack at various points of execution of NestedCalls.java 9

10
10 Stack of Binary Search just before returning from the last recursive call

11
11 Why use recursion? In some problems, iterative solutions are hard to find. But recursion is easy - See the Towers of Hanoi problem in textbook. Animation by Michael Iverson

12
12 Other problems that are neatly solved by recursion: Fractals: The Koch snowﬂake (demo) Sierpinski triangle (demo)

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google