SlideShare a Scribd company logo
More on Recursion

  More techniques




                    1
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
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
/** 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
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
Recursion versus iteration
Iteration                        Recursion
• Uses for or while loop for     • Recursion achieves
   repetition but no recursion     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
• Why use recursion?               variables and formal
                                   parameters, if any)

                                                               6
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
Run NestedCalls.java with Bluej
         Debugger
    Observe the stack memory and
          calling sequences



                                   8
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:   Stack frame for m2:
                      m2_x:      3          m2_x:      3
                      m2_z:       4         m2_z:       4
Stack frame for m1:   Stack frame for m1:   Stack frame for m1:
m1_x:       1         m1_x:       1         m1_x:       1
m1_y:       2         m1_y:       2         m1_y:       2


Just before           Just before           Just before m3
calling m2            calling m3            returns
                                                                  9
Stack of Binary Search just before returning from the
last recursive call




                                                        10
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




                                                    11
Other problems that are neatly solved by recursion:

Fractals:
• The Koch snowflake (demo)
• Sierpinski triangle (demo)




                                                      12

More Related Content

PPT
Super keyword.23
PPTX
Dynamic memory allocation
PDF
Object Oriented Programming - 7.2. Polymorphism
PDF
Longformer: The Long-Document Transformer
PPTX
Pragmatic metaprogramming
PPTX
Dynamic memory allocation(memory,allocation,memory allocatin,calloc,malloc,re...
PDF
21 multi threading - iii
PDF
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...
Super keyword.23
Dynamic memory allocation
Object Oriented Programming - 7.2. Polymorphism
Longformer: The Long-Document Transformer
Pragmatic metaprogramming
Dynamic memory allocation(memory,allocation,memory allocatin,calloc,malloc,re...
21 multi threading - iii
Rust Tutorial | Rust Programming Language Tutorial For Beginners | Rust Train...

What's hot (16)

PPTX
This presentation is a great introduction to both fundamental programming con...
PPT
Polymorphism in java, method overloading and method overriding
PDF
Learn a language : LISP
PPT
Runnable interface.34
PDF
Objective c runtime 分享2
PDF
Oech03
PDF
한국어와 NLTK, Gensim의 만남
PDF
Missilecommand
PDF
C sharp chap6
PPTX
Dynamic Memory Allocation in C
PPTX
#OOP_D_ITS - 2nd - C++ Getting Started
PPTX
PPTX
ML2014_Poster_ TextClusteringDemo
PPTX
Thread priorities
DOCX
C++ assignment
This presentation is a great introduction to both fundamental programming con...
Polymorphism in java, method overloading and method overriding
Learn a language : LISP
Runnable interface.34
Objective c runtime 分享2
Oech03
한국어와 NLTK, Gensim의 만남
Missilecommand
C sharp chap6
Dynamic Memory Allocation in C
#OOP_D_ITS - 2nd - C++ Getting Started
ML2014_Poster_ TextClusteringDemo
Thread priorities
C++ assignment
Ad

Viewers also liked (7)

PDF
Week11
PDF
Fundamentals of data structure in c s. sahni , s. anderson freed and e. horowitz
PPTX
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
PPT
Recursion and looping
PPTX
Recursion
PPT
Recursion
Week11
Fundamentals of data structure in c s. sahni , s. anderson freed and e. horowitz
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Recursion and looping
Recursion
Recursion
Ad

Similar to 4 recursion details (20)

PPTX
Method Shelters : Another Way to Resolve Class Extension Conflicts
PPTX
Recursive Algorithms with their types and implementation
PPT
FUNDAMETAL ALG.ppt
PDF
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
PDF
Python Programming unit5 (1).pdf
PDF
Data Structure Algorithm - Recursion Book Slides
PPT
Data Hiding and Data Encapsulation of java
PPTX
Ruby basics ||
PDF
Accelerating Key Bioinformatics Tasks 100-fold by Improving Memory Access
PPTX
The programming philosophy of jrql
PPT
Cis068 08
PPT
Java Programming - Inheritance
PDF
Ruby basics
DOCX
CS3491-AI and ML lab manual cs3491 r2021
PPTX
Learn Terraform - Variables
PPTX
Data Handling and Function
PPTX
Lecture_7_StackAndRecursion (1).pptx
PPTX
Unit-I Recursion.pptx
KEY
Pharo, an innovative and open-source Smalltalk
PPTX
ML Module 3 Non Linear Learning.pptx
Method Shelters : Another Way to Resolve Class Extension Conflicts
Recursive Algorithms with their types and implementation
FUNDAMETAL ALG.ppt
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
Python Programming unit5 (1).pdf
Data Structure Algorithm - Recursion Book Slides
Data Hiding and Data Encapsulation of java
Ruby basics ||
Accelerating Key Bioinformatics Tasks 100-fold by Improving Memory Access
The programming philosophy of jrql
Cis068 08
Java Programming - Inheritance
Ruby basics
CS3491-AI and ML lab manual cs3491 r2021
Learn Terraform - Variables
Data Handling and Function
Lecture_7_StackAndRecursion (1).pptx
Unit-I Recursion.pptx
Pharo, an innovative and open-source Smalltalk
ML Module 3 Non Linear Learning.pptx

More from Abhijit Gaikwad (11)

PDF
Java concurrency
PPT
20 ch22 collections
PPT
17 sessions
PPT
16 cookies
PPT
15 decorator pattern
PPT
12 memory hierarchy
PPT
12 cache questions
PPT
10 strategy pattern
PPT
9 abstract interface
PPT
8 polymorphism
PPT
7 inheritance
Java concurrency
20 ch22 collections
17 sessions
16 cookies
15 decorator pattern
12 memory hierarchy
12 cache questions
10 strategy pattern
9 abstract interface
8 polymorphism
7 inheritance

4 recursion details

  • 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 Recursion • Uses for or while loop for • Recursion achieves repetition but no recursion 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 • Why use recursion? 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. 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: Stack frame for m2: m2_x: 3 m2_x: 3 m2_z: 4 m2_z: 4 Stack frame for m1: Stack frame for m1: Stack frame for m1: m1_x: 1 m1_x: 1 m1_x: 1 m1_y: 2 m1_y: 2 m1_y: 2 Just before Just before Just before m3 calling m2 calling m3 returns 9
  • 10. Stack of Binary Search just before returning from the last recursive call 10
  • 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 11
  • 12. Other problems that are neatly solved by recursion: Fractals: • The Koch snowflake (demo) • Sierpinski triangle (demo) 12