1 / 12

More on Recursion

More on Recursion. More techniques. 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

Download Presentation

More on Recursion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. More on Recursion More techniques

  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

  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?

  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

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

  6. Recursion versus iteration Iteration 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 tostore the method’s local variables and formal parameters, if any) • Uses for or while loop for repetition but no recursion • Why use recursion?

  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

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

  9. View of stack at various points of execution of NestedCalls.java Stack frame for m3: m3_x: 5 m3_y: 6 Stack frame for m2: m2_x: 3 m2_z: 4 Stack frame for m2: m2_x: 3 m2_z: 4 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 Just before calling m2 Just before calling m3 Just before m3 returns

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

  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. Other problems that are neatly solved by recursion: • Fractals: • The Koch snowflake (demo) • Sierpinski triangle (demo)

More Related