SlideShare a Scribd company logo
College of Computing & Information Technology
King Abdulaziz University
CPCS-204 – Data Structures I
And More
Recursion
And More Recursion page 2
© Dr. Jonathan (Yahya) Cazalas
Binary Search – A reminder
 Array Search
 We are given the following sorted array:
 We are searching for the value, 19 (for example)
 Remember, we said that you search the middle
element
 If found, you are done
 If the element in the middle is greater than 19
 Search to the LEFT (cuz 19 MUST be to the left)
 If the element in the middle is less than 19
 Search to the RIGHT (cuz 19 MUST then be to the right)
index 0 1 2 3 4 5 6 7 8
value 2 6 19 27 33 37 38 41 118
And More Recursion page 3
© Dr. Jonathan (Yahya) Cazalas
Binary Search – A reminder
 Array Search
 We are given the following sorted array:
 We are searching for the value, 19
 So, we MUST start the search in the middle
INDEX of the array.
 In this case:
 The lowest index is 0
 The highest index is 8
 So the middle index is 4
index 0 1 2 3 4 5 6 7 8
value 2 6 19 27 33 37 38 41 118
And More Recursion page 4
© Dr. Jonathan (Yahya) Cazalas
Binary Search
 Array Search
 Correct Strategy
 We would ask, “is the number I am searching for, 19,
greater or less than the number stored in index 4?
 Index 4 stores 33
 The answer would be “less than”
 So we would modify our search range to in between
index 0 and index 3
 Note that index 4 is no longer in the search space
 We then continue this process
 The second index we’d look at is index 1, since (0+3)/2=1
 Then we’d finally get to index 2, since (2+3)/2 = 2
 And at index 2, we would find the value, 19, in the array
And More Recursion page 5
© Dr. Jonathan (Yahya) Cazalas
Binary Search
 Binary Search code:
public static int binSearch(int[] a, int value) {
int low = 0;
int high = a.length;
while (low <= high) {
int mid = (low + high)/2;
if (a[mid] == value)
return 1; // return 1 if found
else if (a[mid] < value)
low = mid + 1;
else
high = mid - 1;
}
return 0; // this only happens if not found
And More Recursion page 6
© Dr. Jonathan (Yahya) Cazalas
Binary Search
 Binary Search code:
 At the end of each array iteration, all we do is
update either low or high
 This modifies our search region
 Essentially halving it
 As we saw previously, this runs in log n time
 But this iterative code isn’t the easiest to read
 We now look at the recursive code
 MUCH easier to read and understand
And More Recursion page 7
© Dr. Jonathan (Yahya) Cazalas
Binary Search – Recursive
 Binary Search using recursion:
 We need a stopping case:
 We need to STOP the recursion at some point
 So when do we stop:
1) When the number is found!
2) Or when the search range is nothing
 huh?
 The search range is empty when (low > high)
 So how let us look at the code…
And More Recursion page 8
© Dr. Jonathan (Yahya) Cazalas
Binary Search – Recursive
 Binary Search Code (using recursion):
 We see how this code follows from the
explanation of binary search quite easily
public static int binSearch(int[] a, int low, int high, int searchVal) {
int mid;
if (low <= high) {
mid = (low+high)/2;
if (searchVal < a[mid])
return binSearch(a, low, mid-1, searchVal);
else if (searchVal > a[mid])
return binSearch(a, mid+1, high, searchVal);
else
return 1;
}
return 0;
}
And More Recursion page 9
© Dr. Jonathan (Yahya) Cazalas
Binary Search – Recursive
 Binary Search Code (using recursion):
 So if the value is found
 We return 1
 Otherwise,
 if (searchVal < a[mid])
 Then recursively call binSearch to the LEFT
 else if (searchVal > a[mid])
 Then recursively call binSearch to the RIGHT
 If low ever becomes greater than high
 This means that searchVal is NOT in the array
And More Recursion page 10
© Dr. Jonathan (Yahya) Cazalas
Brief Interlude: Human Stupidity
And More Recursion page 11
© Dr. Jonathan (Yahya) Cazalas
Recursive Exponentiation
 Example from Previous lecture
 Our function:
 Calculates be
 Some base raised to a power, e
 The input is the base, b, and the exponent, e
 So if the input was 2 for the base and 4 for the exponent
 The answer would be 24 = 16
 How do we do this recursively?
 We need to solve this in such a way that part of the
solution is a sub-problem of the EXACT same nature of
the original problem.
And More Recursion page 12
© Dr. Jonathan (Yahya) Cazalas
Recursive Exponentiation
 Example from Previous lecture
 Our function:
 Using b and e as input, here is our function
 f(b,e) = be
 So to make this recursive, can we say:
 f(b,e) = be = b*b(e-1)
 Does that “look” recursive?
 YES it does!
 Why?
 Cuz the right side is indeed a sub-problem of the original
 We want to evaluate be
 And our right side evaluates b(e-1)
And More Recursion page 13
© Dr. Jonathan (Yahya) Cazalas
Recursive Exponentiation
 Example from Previous lecture
 Our function:
 f(b,e) = b*b(e-1)
 So we need to determine the terminating condition!
 We know that f(b,0) = b0 = 1
 So our terminating condition can be when e = 1
 Additionally, our recursive calls need to return an
expression for f(b,e) in terms of f(b,k)
 for some k < e
 We just found that f(b,e) = b*b(e-1)
 So now we can write our actual function…
And More Recursion page 14
© Dr. Jonathan (Yahya) Cazalas
Recursive Exponentiation
 Example from Previous lecture
 Code:
// Pre-conditions: e is greater than or equal to 0.
// Post-conditions: returns be.
public static int Power(int base, int exponent) {
if ( exponent == 0 )
return 1;
else
return (base*Power(base, exponent-1));
}
And More Recursion page 15
© Dr. Jonathan (Yahya) Cazalas
Recursive Exponentiation
 Example from Previous lecture
 Say we initially call the function with 2 as our base
and 8 as the exponent
 The final return will be
 return 2*2*2*2*2*2*2*2
 Which equals 256
 You notice we have 7 multiplications (exp was 8)
 The number of multiplications needed is one less
than the exponent value
 So if n was the exponent
 The # of multiplications needed would be n-1
And More Recursion page 16
© Dr. Jonathan (Yahya) Cazalas
Fast Exponentiation
 Example from Previous lecture
 This works just fine
 BUT, it becomes VERY slow for large exponents
 If the exponent was 10,000, that would be 9,999 mults!
 How can we do better?
 One key idea:
 Remembering the laws of exponents
 Yeah, algebra…the thing you forgot about two years ago
 So using the laws of exponents
 We remember that 28 = 24*24
And More Recursion page 17
© Dr. Jonathan (Yahya) Cazalas
Fast Exponentiation
 Example from Previous lecture
 One key idea:
 Remembering the laws of exponents
 28 = 24*24
 Now, if we know 24
 we can calculate 28 with one multiplication
 What is 24?
 24 = 22*22
 and 22 = 2*(2)
 So… 2*(2) = 4, 4*(4) = 16, 16*(16) = 256 = 28
 So we’ve calculated 28 using only three multiplications
 MUCH better than 7 multiplications
And More Recursion page 18
© Dr. Jonathan (Yahya) Cazalas
Fast Exponentiation
 Example of Fast Exponentiation
 So, in general, we can say:
 bn = bn/2*bn/2
 So to find bn, we find bn/2
 HALF of the original amount
 And to find bn/2, we find bn/4
 Again, HALF of bn/2
 This smells like a log n running time
 log n number of multiplications
 Much better than n multiplications
 But as of now, this only works if n is even
And More Recursion page 19
© Dr. Jonathan (Yahya) Cazalas
Fast Exponentiation
 Example of Fast Exponentiation
 So, in general, we can say:
 bn = bn/2*bn/2
 This works when n is even
 But what if n is odd?
 Notice that 29 = 24*24*2
 So, in general, we can say:
/ 2 / 2
/ 2 / 2
( ) if n is even
( )( ) if n is odd
n n
n
n n
a a
a
a a a

= 

And More Recursion page 20
© Dr. Jonathan (Yahya) Cazalas
Fast Exponentiation
 Example of Fast Exponentiation
 Also, this method relies on “integer division”
 We’ve briefly discussed this
 Basically if n is 9, then n/2 = 4
 Integer division
 Think of it as dividing
 AND then rounding down, if needed, to the nearest integer
 So if n is 121, then n/2 = 60
 Finally, if n is 57, then n/2 = 28
 Using the same base case as the previous
power function, here is the code…
And More Recursion page 21
© Dr. Jonathan (Yahya) Cazalas
Fast Exponentiation
 Example of Fast Exponentiation
 Code:
Public static int powerB(int base, int exp) {
if (exp == 0)
return 1;
else if (exp == 1)
return base;
else if (exp%2 == 0)
return powerB(base*base, exp/2);
else
return base*powerB(base, exp-1);
}
And More Recursion page 22
© Dr. Jonathan (Yahya) Cazalas
Recursion
WASN’T
THAT
BODACIOUS!
And More Recursion page 23
© Dr. Jonathan (Yahya) Cazalas
Daily Demotivator
College of Computing & Information Technology
King Abdulaziz University
CPCS-204 – Data Structures I
And More
Recursion

More Related Content

PDF
recursion1
PDF
recursion2
PDF
binary_trees4
PDF
introduction
PDF
binary_trees2
PPTX
17. Java data structures trees representation and traversal
PPT
Review session2
PDF
Recursion Pattern Analysis and Feedback
recursion1
recursion2
binary_trees4
introduction
binary_trees2
17. Java data structures trees representation and traversal
Review session2
Recursion Pattern Analysis and Feedback

What's hot (20)

PDF
L3
PDF
Lecture 5: Neural Networks II
PDF
Lesson 6 recursion
PPT
Chapter 6 ds
PDF
Lesson 4 stacks and queues
PPTX
17. Trees and Tree Like Structures
PPTX
18. Dictionaries, Hash-Tables and Set
PDF
Lesson 2.2 abstraction
PPT
PPTX
Advanced data structure
PPTX
Binary search tree
PPTX
Monadic Comprehensions and Functional Composition with Query Expressions
PDF
Java - Arrays Concepts
PPTX
Knowledge Representation, Inference and Reasoning
PDF
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
PPTX
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
RTF
algorithm unit 1
DOC
algorithm Unit 5
PDF
DOC
algorithm Unit 2
L3
Lecture 5: Neural Networks II
Lesson 6 recursion
Chapter 6 ds
Lesson 4 stacks and queues
17. Trees and Tree Like Structures
18. Dictionaries, Hash-Tables and Set
Lesson 2.2 abstraction
Advanced data structure
Binary search tree
Monadic Comprehensions and Functional Composition with Query Expressions
Java - Arrays Concepts
Knowledge Representation, Inference and Reasoning
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
algorithm unit 1
algorithm Unit 5
algorithm Unit 2
Ad

Similar to recursion3 (20)

PDF
binary_search
PDF
DOCX
Based on the readings and content for this course.docxBased on.docx
PPTX
Introduction to Dynamic Programming.pptx
PPT
Exploring Algorithms
PDF
Dynamic programming
PPTX
Are there trends, changes in the mi.pptx
PDF
Sure interview algorithm-1103
PDF
Recursion.pdf
PDF
Binary Indexed Tree / Fenwick Tree
PPTX
Recursion
PDF
01 Notes Introduction Analysis of Algorithms Notes
PDF
Relational Algebra & Calculus
PPTX
Divide and conquer
PPTX
9. Asymptotic Analysizbbsbsbsbshzhsbbss.pptx
PDF
algorithm_analysis1
DOCX
PPS 7.7 RECURSION, AS A DIFFERENT WAY OF SOLVING PROBLEMS. EXAMPLE PROGRAMS
PDF
Fibonacci Function Gallery - Part 1 (of a series) - with minor corrections
binary_search
Based on the readings and content for this course.docxBased on.docx
Introduction to Dynamic Programming.pptx
Exploring Algorithms
Dynamic programming
Are there trends, changes in the mi.pptx
Sure interview algorithm-1103
Recursion.pdf
Binary Indexed Tree / Fenwick Tree
Recursion
01 Notes Introduction Analysis of Algorithms Notes
Relational Algebra & Calculus
Divide and conquer
9. Asymptotic Analysizbbsbsbsbshzhsbbss.pptx
algorithm_analysis1
PPS 7.7 RECURSION, AS A DIFFERENT WAY OF SOLVING PROBLEMS. EXAMPLE PROGRAMS
Fibonacci Function Gallery - Part 1 (of a series) - with minor corrections
Ad

More from Mohamed Elsayed (18)

PDF
binary_trees3
PDF
binary_trees1
PDF
PDF
PDF
PDF
algorithm_analysis2
PDF
linked_lists4
PDF
linked_lists3
PDF
Linked_lists2
PDF
linked_lists
PDF
sorted_listmatch
PDF
PDF
PDF
hash_tables
PDF
PDF
quick_sort
PDF
merge_sort
PDF
n-squared_sorts
binary_trees3
binary_trees1
algorithm_analysis2
linked_lists4
linked_lists3
Linked_lists2
linked_lists
sorted_listmatch
hash_tables
quick_sort
merge_sort
n-squared_sorts

Recently uploaded (20)

PPTX
Presentation on HIE in infants and its manifestations
PPTX
GDM (1) (1).pptx small presentation for students
PDF
Anesthesia in Laparoscopic Surgery in India
PDF
RMMM.pdf make it easy to upload and study
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
Classroom Observation Tools for Teachers
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PPTX
Cell Structure & Organelles in detailed.
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PDF
Complications of Minimal Access Surgery at WLH
PDF
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
Cell Types and Its function , kingdom of life
Presentation on HIE in infants and its manifestations
GDM (1) (1).pptx small presentation for students
Anesthesia in Laparoscopic Surgery in India
RMMM.pdf make it easy to upload and study
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Classroom Observation Tools for Teachers
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Module 4: Burden of Disease Tutorial Slides S2 2025
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
202450812 BayCHI UCSC-SV 20250812 v17.pptx
Cell Structure & Organelles in detailed.
Microbial diseases, their pathogenesis and prophylaxis
human mycosis Human fungal infections are called human mycosis..pptx
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
2.FourierTransform-ShortQuestionswithAnswers.pdf
Chinmaya Tiranga quiz Grand Finale.pdf
Complications of Minimal Access Surgery at WLH
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
Cell Types and Its function , kingdom of life

recursion3

  • 1. College of Computing & Information Technology King Abdulaziz University CPCS-204 – Data Structures I And More Recursion
  • 2. And More Recursion page 2 © Dr. Jonathan (Yahya) Cazalas Binary Search – A reminder  Array Search  We are given the following sorted array:  We are searching for the value, 19 (for example)  Remember, we said that you search the middle element  If found, you are done  If the element in the middle is greater than 19  Search to the LEFT (cuz 19 MUST be to the left)  If the element in the middle is less than 19  Search to the RIGHT (cuz 19 MUST then be to the right) index 0 1 2 3 4 5 6 7 8 value 2 6 19 27 33 37 38 41 118
  • 3. And More Recursion page 3 © Dr. Jonathan (Yahya) Cazalas Binary Search – A reminder  Array Search  We are given the following sorted array:  We are searching for the value, 19  So, we MUST start the search in the middle INDEX of the array.  In this case:  The lowest index is 0  The highest index is 8  So the middle index is 4 index 0 1 2 3 4 5 6 7 8 value 2 6 19 27 33 37 38 41 118
  • 4. And More Recursion page 4 © Dr. Jonathan (Yahya) Cazalas Binary Search  Array Search  Correct Strategy  We would ask, “is the number I am searching for, 19, greater or less than the number stored in index 4?  Index 4 stores 33  The answer would be “less than”  So we would modify our search range to in between index 0 and index 3  Note that index 4 is no longer in the search space  We then continue this process  The second index we’d look at is index 1, since (0+3)/2=1  Then we’d finally get to index 2, since (2+3)/2 = 2  And at index 2, we would find the value, 19, in the array
  • 5. And More Recursion page 5 © Dr. Jonathan (Yahya) Cazalas Binary Search  Binary Search code: public static int binSearch(int[] a, int value) { int low = 0; int high = a.length; while (low <= high) { int mid = (low + high)/2; if (a[mid] == value) return 1; // return 1 if found else if (a[mid] < value) low = mid + 1; else high = mid - 1; } return 0; // this only happens if not found
  • 6. And More Recursion page 6 © Dr. Jonathan (Yahya) Cazalas Binary Search  Binary Search code:  At the end of each array iteration, all we do is update either low or high  This modifies our search region  Essentially halving it  As we saw previously, this runs in log n time  But this iterative code isn’t the easiest to read  We now look at the recursive code  MUCH easier to read and understand
  • 7. And More Recursion page 7 © Dr. Jonathan (Yahya) Cazalas Binary Search – Recursive  Binary Search using recursion:  We need a stopping case:  We need to STOP the recursion at some point  So when do we stop: 1) When the number is found! 2) Or when the search range is nothing  huh?  The search range is empty when (low > high)  So how let us look at the code…
  • 8. And More Recursion page 8 © Dr. Jonathan (Yahya) Cazalas Binary Search – Recursive  Binary Search Code (using recursion):  We see how this code follows from the explanation of binary search quite easily public static int binSearch(int[] a, int low, int high, int searchVal) { int mid; if (low <= high) { mid = (low+high)/2; if (searchVal < a[mid]) return binSearch(a, low, mid-1, searchVal); else if (searchVal > a[mid]) return binSearch(a, mid+1, high, searchVal); else return 1; } return 0; }
  • 9. And More Recursion page 9 © Dr. Jonathan (Yahya) Cazalas Binary Search – Recursive  Binary Search Code (using recursion):  So if the value is found  We return 1  Otherwise,  if (searchVal < a[mid])  Then recursively call binSearch to the LEFT  else if (searchVal > a[mid])  Then recursively call binSearch to the RIGHT  If low ever becomes greater than high  This means that searchVal is NOT in the array
  • 10. And More Recursion page 10 © Dr. Jonathan (Yahya) Cazalas Brief Interlude: Human Stupidity
  • 11. And More Recursion page 11 © Dr. Jonathan (Yahya) Cazalas Recursive Exponentiation  Example from Previous lecture  Our function:  Calculates be  Some base raised to a power, e  The input is the base, b, and the exponent, e  So if the input was 2 for the base and 4 for the exponent  The answer would be 24 = 16  How do we do this recursively?  We need to solve this in such a way that part of the solution is a sub-problem of the EXACT same nature of the original problem.
  • 12. And More Recursion page 12 © Dr. Jonathan (Yahya) Cazalas Recursive Exponentiation  Example from Previous lecture  Our function:  Using b and e as input, here is our function  f(b,e) = be  So to make this recursive, can we say:  f(b,e) = be = b*b(e-1)  Does that “look” recursive?  YES it does!  Why?  Cuz the right side is indeed a sub-problem of the original  We want to evaluate be  And our right side evaluates b(e-1)
  • 13. And More Recursion page 13 © Dr. Jonathan (Yahya) Cazalas Recursive Exponentiation  Example from Previous lecture  Our function:  f(b,e) = b*b(e-1)  So we need to determine the terminating condition!  We know that f(b,0) = b0 = 1  So our terminating condition can be when e = 1  Additionally, our recursive calls need to return an expression for f(b,e) in terms of f(b,k)  for some k < e  We just found that f(b,e) = b*b(e-1)  So now we can write our actual function…
  • 14. And More Recursion page 14 © Dr. Jonathan (Yahya) Cazalas Recursive Exponentiation  Example from Previous lecture  Code: // Pre-conditions: e is greater than or equal to 0. // Post-conditions: returns be. public static int Power(int base, int exponent) { if ( exponent == 0 ) return 1; else return (base*Power(base, exponent-1)); }
  • 15. And More Recursion page 15 © Dr. Jonathan (Yahya) Cazalas Recursive Exponentiation  Example from Previous lecture  Say we initially call the function with 2 as our base and 8 as the exponent  The final return will be  return 2*2*2*2*2*2*2*2  Which equals 256  You notice we have 7 multiplications (exp was 8)  The number of multiplications needed is one less than the exponent value  So if n was the exponent  The # of multiplications needed would be n-1
  • 16. And More Recursion page 16 © Dr. Jonathan (Yahya) Cazalas Fast Exponentiation  Example from Previous lecture  This works just fine  BUT, it becomes VERY slow for large exponents  If the exponent was 10,000, that would be 9,999 mults!  How can we do better?  One key idea:  Remembering the laws of exponents  Yeah, algebra…the thing you forgot about two years ago  So using the laws of exponents  We remember that 28 = 24*24
  • 17. And More Recursion page 17 © Dr. Jonathan (Yahya) Cazalas Fast Exponentiation  Example from Previous lecture  One key idea:  Remembering the laws of exponents  28 = 24*24  Now, if we know 24  we can calculate 28 with one multiplication  What is 24?  24 = 22*22  and 22 = 2*(2)  So… 2*(2) = 4, 4*(4) = 16, 16*(16) = 256 = 28  So we’ve calculated 28 using only three multiplications  MUCH better than 7 multiplications
  • 18. And More Recursion page 18 © Dr. Jonathan (Yahya) Cazalas Fast Exponentiation  Example of Fast Exponentiation  So, in general, we can say:  bn = bn/2*bn/2  So to find bn, we find bn/2  HALF of the original amount  And to find bn/2, we find bn/4  Again, HALF of bn/2  This smells like a log n running time  log n number of multiplications  Much better than n multiplications  But as of now, this only works if n is even
  • 19. And More Recursion page 19 © Dr. Jonathan (Yahya) Cazalas Fast Exponentiation  Example of Fast Exponentiation  So, in general, we can say:  bn = bn/2*bn/2  This works when n is even  But what if n is odd?  Notice that 29 = 24*24*2  So, in general, we can say: / 2 / 2 / 2 / 2 ( ) if n is even ( )( ) if n is odd n n n n n a a a a a a  =  
  • 20. And More Recursion page 20 © Dr. Jonathan (Yahya) Cazalas Fast Exponentiation  Example of Fast Exponentiation  Also, this method relies on “integer division”  We’ve briefly discussed this  Basically if n is 9, then n/2 = 4  Integer division  Think of it as dividing  AND then rounding down, if needed, to the nearest integer  So if n is 121, then n/2 = 60  Finally, if n is 57, then n/2 = 28  Using the same base case as the previous power function, here is the code…
  • 21. And More Recursion page 21 © Dr. Jonathan (Yahya) Cazalas Fast Exponentiation  Example of Fast Exponentiation  Code: Public static int powerB(int base, int exp) { if (exp == 0) return 1; else if (exp == 1) return base; else if (exp%2 == 0) return powerB(base*base, exp/2); else return base*powerB(base, exp-1); }
  • 22. And More Recursion page 22 © Dr. Jonathan (Yahya) Cazalas Recursion WASN’T THAT BODACIOUS!
  • 23. And More Recursion page 23 © Dr. Jonathan (Yahya) Cazalas Daily Demotivator
  • 24. College of Computing & Information Technology King Abdulaziz University CPCS-204 – Data Structures I And More Recursion