SlideShare a Scribd company logo
1 of 24
Download to read offline
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

What's hot

Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIATypes Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Dheeraj Kataria
 

What's hot (20)

L3
L3L3
L3
 
Lecture 5: Neural Networks II
Lecture 5: Neural Networks IILecture 5: Neural Networks II
Lecture 5: Neural Networks II
 
Lesson 6 recursion
Lesson 6  recursionLesson 6  recursion
Lesson 6 recursion
 
Chapter 6 ds
Chapter 6 dsChapter 6 ds
Chapter 6 ds
 
Lesson 4 stacks and queues
Lesson 4  stacks and queuesLesson 4  stacks and queues
Lesson 4 stacks and queues
 
17. Trees and Tree Like Structures
17. Trees and Tree Like Structures17. Trees and Tree Like Structures
17. Trees and Tree Like Structures
 
18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set
 
Lesson 2.2 abstraction
Lesson 2.2   abstractionLesson 2.2   abstraction
Lesson 2.2 abstraction
 
07slide
07slide07slide
07slide
 
Advanced data structure
Advanced data structureAdvanced data structure
Advanced data structure
 
Binary search tree
Binary search treeBinary search tree
Binary search tree
 
Monadic Comprehensions and Functional Composition with Query Expressions
Monadic Comprehensions and Functional Composition with Query ExpressionsMonadic Comprehensions and Functional Composition with Query Expressions
Monadic Comprehensions and Functional Composition with Query Expressions
 
Java - Arrays Concepts
Java - Arrays ConceptsJava - Arrays Concepts
Java - Arrays Concepts
 
Knowledge Representation, Inference and Reasoning
Knowledge Representation, Inference and ReasoningKnowledge Representation, Inference and Reasoning
Knowledge Representation, Inference and Reasoning
 
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
 
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIATypes Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
 
algorithm unit 1
algorithm unit 1algorithm unit 1
algorithm unit 1
 
algorithm Unit 5
algorithm Unit 5 algorithm Unit 5
algorithm Unit 5
 
Lesson 2.1 array
Lesson 2.1   arrayLesson 2.1   array
Lesson 2.1 array
 
algorithm Unit 2
algorithm Unit 2 algorithm Unit 2
algorithm Unit 2
 

Similar to recursion3

Based on the readings and content for this course.docxBased on.docx
Based on the readings and content for this course.docxBased on.docxBased on the readings and content for this course.docxBased on.docx
Based on the readings and content for this course.docxBased on.docx
ikirkton
 
Exploring Algorithms
Exploring AlgorithmsExploring Algorithms
Exploring Algorithms
Sri Prasanna
 
Sure interview algorithm-1103
Sure interview algorithm-1103Sure interview algorithm-1103
Sure interview algorithm-1103
Sure Interview
 

Similar to recursion3 (20)

binary_search
binary_searchbinary_search
binary_search
 
heaps2
heaps2heaps2
heaps2
 
Based on the readings and content for this course.docxBased on.docx
Based on the readings and content for this course.docxBased on.docxBased on the readings and content for this course.docxBased on.docx
Based on the readings and content for this course.docxBased on.docx
 
Introduction to Dynamic Programming.pptx
Introduction to Dynamic Programming.pptxIntroduction to Dynamic Programming.pptx
Introduction to Dynamic Programming.pptx
 
C12 bst
C12 bstC12 bst
C12 bst
 
C12 bst
C12 bstC12 bst
C12 bst
 
Exploring Algorithms
Exploring AlgorithmsExploring Algorithms
Exploring Algorithms
 
Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 
Sure interview algorithm-1103
Sure interview algorithm-1103Sure interview algorithm-1103
Sure interview algorithm-1103
 
Recursion.pdf
Recursion.pdfRecursion.pdf
Recursion.pdf
 
Binary Indexed Tree / Fenwick Tree
Binary Indexed Tree / Fenwick TreeBinary Indexed Tree / Fenwick Tree
Binary Indexed Tree / Fenwick Tree
 
Recursion
RecursionRecursion
Recursion
 
01 Notes Introduction Analysis of Algorithms Notes
01 Notes Introduction Analysis of Algorithms Notes01 Notes Introduction Analysis of Algorithms Notes
01 Notes Introduction Analysis of Algorithms Notes
 
Relational Algebra & Calculus
Relational Algebra & CalculusRelational Algebra & Calculus
Relational Algebra & Calculus
 
Divide and conquer
Divide and conquerDivide and conquer
Divide and conquer
 
algorithm_analysis1
algorithm_analysis1algorithm_analysis1
algorithm_analysis1
 
Algorithm in computer science
Algorithm in computer scienceAlgorithm in computer science
Algorithm in computer science
 
Tower of Hanoi.ppt
Tower of Hanoi.pptTower of Hanoi.ppt
Tower of Hanoi.ppt
 
lec18_ref.pdf
lec18_ref.pdflec18_ref.pdf
lec18_ref.pdf
 
Introduction to Real Analysis 4th Edition Bartle Solutions Manual
Introduction to Real Analysis 4th Edition Bartle Solutions ManualIntroduction to Real Analysis 4th Edition Bartle Solutions Manual
Introduction to Real Analysis 4th Edition Bartle Solutions Manual
 

More from Mohamed Elsayed

More from Mohamed Elsayed (18)

binary_trees3
binary_trees3binary_trees3
binary_trees3
 
binary_trees1
binary_trees1binary_trees1
binary_trees1
 
queues
queuesqueues
queues
 
stacks2
stacks2stacks2
stacks2
 
stacks1
stacks1stacks1
stacks1
 
algorithm_analysis2
algorithm_analysis2algorithm_analysis2
algorithm_analysis2
 
linked_lists4
linked_lists4linked_lists4
linked_lists4
 
linked_lists3
linked_lists3linked_lists3
linked_lists3
 
Linked_lists2
Linked_lists2Linked_lists2
Linked_lists2
 
linked_lists
linked_listslinked_lists
linked_lists
 
sorted_listmatch
sorted_listmatchsorted_listmatch
sorted_listmatch
 
arrays
arraysarrays
arrays
 
heaps
heapsheaps
heaps
 
hash_tables
hash_tableshash_tables
hash_tables
 
graphs
graphsgraphs
graphs
 
quick_sort
quick_sortquick_sort
quick_sort
 
merge_sort
merge_sortmerge_sort
merge_sort
 
n-squared_sorts
n-squared_sortsn-squared_sorts
n-squared_sorts
 

Recently uploaded

Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
negromaestrong
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
ZurliaSoop
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please Practise
AnaAcapella
 

Recently uploaded (20)

How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
Unit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptxUnit-IV; Professional Sales Representative (PSR).pptx
Unit-IV; Professional Sales Representative (PSR).pptx
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Third Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptxThird Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptx
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Seal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptxSeal of Good Local Governance (SGLG) 2024Final.pptx
Seal of Good Local Governance (SGLG) 2024Final.pptx
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17  How to Extend Models Using Mixin ClassesMixin Classes in Odoo 17  How to Extend Models Using Mixin Classes
Mixin Classes in Odoo 17 How to Extend Models Using Mixin Classes
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
Asian American Pacific Islander Month DDSD 2024.pptx
Asian American Pacific Islander Month DDSD 2024.pptxAsian American Pacific Islander Month DDSD 2024.pptx
Asian American Pacific Islander Month DDSD 2024.pptx
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please Practise
 

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