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
Mohamed Elsayed
 
PDF
recursion2
Mohamed Elsayed
 
PDF
binary_trees4
Mohamed Elsayed
 
PDF
introduction
Mohamed Elsayed
 
PDF
binary_trees2
Mohamed Elsayed
 
PPTX
17. Java data structures trees representation and traversal
Intro C# Book
 
PPT
Review session2
NEEDY12345
 
PDF
Recursion Pattern Analysis and Feedback
Sander Mak (@Sander_Mak)
 
recursion1
Mohamed Elsayed
 
recursion2
Mohamed Elsayed
 
binary_trees4
Mohamed Elsayed
 
introduction
Mohamed Elsayed
 
binary_trees2
Mohamed Elsayed
 
17. Java data structures trees representation and traversal
Intro C# Book
 
Review session2
NEEDY12345
 
Recursion Pattern Analysis and Feedback
Sander Mak (@Sander_Mak)
 

What's hot (20)

PDF
L3
lksoo
 
PDF
Lecture 5: Neural Networks II
Sang Jun Lee
 
PDF
Lesson 6 recursion
MLG College of Learning, Inc
 
PPT
Chapter 6 ds
Hanif Durad
 
PDF
Lesson 4 stacks and queues
MLG College of Learning, Inc
 
PPTX
17. Trees and Tree Like Structures
Intro C# Book
 
PPTX
18. Dictionaries, Hash-Tables and Set
Intro C# Book
 
PDF
Lesson 2.2 abstraction
MLG College of Learning, Inc
 
PPT
07slide
Dorothea Chaffin
 
PPTX
Advanced data structure
Shakil Ahmed
 
PPTX
Binary search tree
RacksaviR
 
PPTX
Monadic Comprehensions and Functional Composition with Query Expressions
Chris Eargle
 
PDF
Java - Arrays Concepts
Victer Paul
 
PPTX
Knowledge Representation, Inference and Reasoning
Sagacious IT Solution
 
PDF
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
IJECEIAES
 
PPTX
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Dheeraj Kataria
 
RTF
algorithm unit 1
Monika Choudhery
 
DOC
algorithm Unit 5
Monika Choudhery
 
PDF
Lesson 2.1 array
MLG College of Learning, Inc
 
DOC
algorithm Unit 2
Monika Choudhery
 
L3
lksoo
 
Lecture 5: Neural Networks II
Sang Jun Lee
 
Lesson 6 recursion
MLG College of Learning, Inc
 
Chapter 6 ds
Hanif Durad
 
Lesson 4 stacks and queues
MLG College of Learning, Inc
 
17. Trees and Tree Like Structures
Intro C# Book
 
18. Dictionaries, Hash-Tables and Set
Intro C# Book
 
Lesson 2.2 abstraction
MLG College of Learning, Inc
 
Advanced data structure
Shakil Ahmed
 
Binary search tree
RacksaviR
 
Monadic Comprehensions and Functional Composition with Query Expressions
Chris Eargle
 
Java - Arrays Concepts
Victer Paul
 
Knowledge Representation, Inference and Reasoning
Sagacious IT Solution
 
Domain Examination of Chaos Logistics Function As A Key Generator in Cryptogr...
IJECEIAES
 
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Dheeraj Kataria
 
algorithm unit 1
Monika Choudhery
 
algorithm Unit 5
Monika Choudhery
 
algorithm Unit 2
Monika Choudhery
 
Ad

Similar to recursion3 (20)

PPTX
Recursion and Sorting Algorithms
Afaq Mansoor Khan
 
PDF
Iterations and Recursions
Abdul Rahman Sherzad
 
PPT
Recursion
Malainine Zaid
 
PPTX
Recursion in Data Structure
khudabux1998
 
PPT
FUNDAMETAL ALG.ppt
Menaka Sivakumar
 
PPT
recursion based on koffmann and wolfgang
vidhyapm2
 
PPTX
Recursion
Syed Zaid Irshad
 
PDF
Iteration, induction, and recursion
Mohammed Hussein
 
PDF
Recursion.pdf
Flavia Tembo Kambale
 
PPT
Data Structures- Part5 recursion
Abdullah Al-hazmy
 
PPT
Lecture9 recursion
Muhammad Zubair
 
PPT
14 recursion
Himadri Sen Gupta
 
PPT
Recursion.ppt
ssuser53af97
 
PDF
062636636366363773737373733+73737733+7.pdf
GauravKumar295392
 
PPTX
Lec1.pptx
AsadbekIbragimov1
 
PDF
201707 CSE110 Lecture 33
Javier Gonzalez-Sanchez
 
PDF
Recursion Lecture in Java
Raffi Khatchadourian
 
PPT
Tower of Hanoi.ppt
SACHINVERMA255386
 
PPTX
Programing techniques
Prabhjit Singh
 
PPTX
2.pptx
MohAlyasin1
 
Recursion and Sorting Algorithms
Afaq Mansoor Khan
 
Iterations and Recursions
Abdul Rahman Sherzad
 
Recursion
Malainine Zaid
 
Recursion in Data Structure
khudabux1998
 
FUNDAMETAL ALG.ppt
Menaka Sivakumar
 
recursion based on koffmann and wolfgang
vidhyapm2
 
Recursion
Syed Zaid Irshad
 
Iteration, induction, and recursion
Mohammed Hussein
 
Recursion.pdf
Flavia Tembo Kambale
 
Data Structures- Part5 recursion
Abdullah Al-hazmy
 
Lecture9 recursion
Muhammad Zubair
 
14 recursion
Himadri Sen Gupta
 
Recursion.ppt
ssuser53af97
 
062636636366363773737373733+73737733+7.pdf
GauravKumar295392
 
201707 CSE110 Lecture 33
Javier Gonzalez-Sanchez
 
Recursion Lecture in Java
Raffi Khatchadourian
 
Tower of Hanoi.ppt
SACHINVERMA255386
 
Programing techniques
Prabhjit Singh
 
2.pptx
MohAlyasin1
 
Ad

More from Mohamed Elsayed (20)

PDF
binary_trees3
Mohamed Elsayed
 
PDF
binary_trees1
Mohamed Elsayed
 
PDF
queues
Mohamed Elsayed
 
PDF
stacks2
Mohamed Elsayed
 
PDF
stacks1
Mohamed Elsayed
 
PDF
algorithm_analysis2
Mohamed Elsayed
 
PDF
algorithm_analysis1
Mohamed Elsayed
 
PDF
linked_lists4
Mohamed Elsayed
 
PDF
linked_lists3
Mohamed Elsayed
 
PDF
Linked_lists2
Mohamed Elsayed
 
PDF
linked_lists
Mohamed Elsayed
 
PDF
sorted_listmatch
Mohamed Elsayed
 
PDF
binary_search
Mohamed Elsayed
 
PDF
arrays
Mohamed Elsayed
 
PDF
heaps2
Mohamed Elsayed
 
PDF
heaps
Mohamed Elsayed
 
PDF
hash_tables
Mohamed Elsayed
 
PDF
graphs
Mohamed Elsayed
 
PDF
quick_sort
Mohamed Elsayed
 
PDF
merge_sort
Mohamed Elsayed
 
binary_trees3
Mohamed Elsayed
 
binary_trees1
Mohamed Elsayed
 
algorithm_analysis2
Mohamed Elsayed
 
algorithm_analysis1
Mohamed Elsayed
 
linked_lists4
Mohamed Elsayed
 
linked_lists3
Mohamed Elsayed
 
Linked_lists2
Mohamed Elsayed
 
linked_lists
Mohamed Elsayed
 
sorted_listmatch
Mohamed Elsayed
 
binary_search
Mohamed Elsayed
 
hash_tables
Mohamed Elsayed
 
quick_sort
Mohamed Elsayed
 
merge_sort
Mohamed Elsayed
 

Recently uploaded (20)

PDF
What is CFA?? Complete Guide to the Chartered Financial Analyst Program
sp4989653
 
PPTX
PPTs-The Rise of Empiresghhhhhhhh (1).pptx
academysrusti114
 
PPTX
Python-Application-in-Drug-Design by R D Jawarkar.pptx
Rahul Jawarkar
 
PPT
Python Programming Unit II Control Statements.ppt
CUO VEERANAN VEERANAN
 
PDF
Types of Literary Text: Poetry and Prose
kaelandreabibit
 
PPTX
HISTORY COLLECTION FOR PSYCHIATRIC PATIENTS.pptx
PoojaSen20
 
PPTX
Trends in pediatric nursing .pptx
AneetaSharma15
 
PPTX
Introduction to pediatric nursing in 5th Sem..pptx
AneetaSharma15
 
PDF
Study Material and notes for Women Empowerment
ComputerScienceSACWC
 
DOCX
SAROCES Action-Plan FOR ARAL PROGRAM IN DEPED
Levenmartlacuna1
 
PPTX
Information Texts_Infographic on Forgetting Curve.pptx
Tata Sevilla
 
PDF
The-Invisible-Living-World-Beyond-Our-Naked-Eye chapter 2.pdf/8th science cur...
Sandeep Swamy
 
PDF
2.Reshaping-Indias-Political-Map.ppt/pdf/8th class social science Exploring S...
Sandeep Swamy
 
PPTX
CARE OF UNCONSCIOUS PATIENTS .pptx
AneetaSharma15
 
PPTX
Software Engineering BSC DS UNIT 1 .pptx
Dr. Pallawi Bulakh
 
PPTX
Tips Management in Odoo 18 POS - Odoo Slides
Celine George
 
PPTX
PREVENTIVE PEDIATRIC. pptx
AneetaSharma15
 
PDF
Health-The-Ultimate-Treasure (1).pdf/8th class science curiosity /samyans edu...
Sandeep Swamy
 
PPTX
An introduction to Prepositions for beginners.pptx
drsiddhantnagine
 
PDF
Antianginal agents, Definition, Classification, MOA.pdf
Prerana Jadhav
 
What is CFA?? Complete Guide to the Chartered Financial Analyst Program
sp4989653
 
PPTs-The Rise of Empiresghhhhhhhh (1).pptx
academysrusti114
 
Python-Application-in-Drug-Design by R D Jawarkar.pptx
Rahul Jawarkar
 
Python Programming Unit II Control Statements.ppt
CUO VEERANAN VEERANAN
 
Types of Literary Text: Poetry and Prose
kaelandreabibit
 
HISTORY COLLECTION FOR PSYCHIATRIC PATIENTS.pptx
PoojaSen20
 
Trends in pediatric nursing .pptx
AneetaSharma15
 
Introduction to pediatric nursing in 5th Sem..pptx
AneetaSharma15
 
Study Material and notes for Women Empowerment
ComputerScienceSACWC
 
SAROCES Action-Plan FOR ARAL PROGRAM IN DEPED
Levenmartlacuna1
 
Information Texts_Infographic on Forgetting Curve.pptx
Tata Sevilla
 
The-Invisible-Living-World-Beyond-Our-Naked-Eye chapter 2.pdf/8th science cur...
Sandeep Swamy
 
2.Reshaping-Indias-Political-Map.ppt/pdf/8th class social science Exploring S...
Sandeep Swamy
 
CARE OF UNCONSCIOUS PATIENTS .pptx
AneetaSharma15
 
Software Engineering BSC DS UNIT 1 .pptx
Dr. Pallawi Bulakh
 
Tips Management in Odoo 18 POS - Odoo Slides
Celine George
 
PREVENTIVE PEDIATRIC. pptx
AneetaSharma15
 
Health-The-Ultimate-Treasure (1).pdf/8th class science curiosity /samyans edu...
Sandeep Swamy
 
An introduction to Prepositions for beginners.pptx
drsiddhantnagine
 
Antianginal agents, Definition, Classification, MOA.pdf
Prerana Jadhav
 

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