SlideShare a Scribd company logo
Recursion
CS 308 – Data Structures
What is recursion?
• Sometimes, the best way to solve a problem
is by solving a smaller version of the exact
same problem first
• Recursion is a technique that solves a
problem by solving a smaller problem of the
same type
When you turn this into a program, you end
up with functions that call themselves
(recursive functions)
int f(int x)
{
int y;
if(x==0)
return 1;
else {
y = 2 * f(x-1);
return y+1;
}
}
Problems defined recursively
• There are many problems whose solution
can be defined recursively
Example: n factorial
1 if n = 0
n!= (recursive solution)
(n-1)!*n if n > 0
1 if n = 0
n!= (closed form solution)
1*2*3*…*(n-1)*n if n > 0
Coding the factorial function
• Recursive implementation
int Factorial(int n)
{
if (n==0) // base case
return 1;
else
return n * Factorial(n-1);
}
Recursion.ppt
Coding the factorial function
(cont.)
• Iterative implementation
int Factorial(int n)
{
int fact = 1;
for(int count = 2; count <= n; count++)
fact = fact * count;
return fact;
}
Another example:
n choose k (combinations)
• Given n things, how many different sets of
size k can be chosen?
n n-1 n-1
= + , 1 < k < n (recursive solution)
k k k-1
n n!
= , 1 < k < n (closed-form solution)
k k!(n-k)!
with base cases:
n n
= n (k = 1), = 1 (k = n)
1 n
int Combinations(int n, int k)
{
if(k == 1) // base case 1
return n;
else if (n == k) // base case 2
return 1;
else
return(Combinations(n-1, k) + Combinations(n-1, k-1));
}
n choose k (combinations)
Recursion.ppt
Recursion vs. iteration
• Iteration can be used in place of recursion
– An iterative algorithm uses a looping construct
– A recursive algorithm uses a branching structure
• Recursive solutions are often less efficient, in
terms of both time and space, than iterative
solutions
• Recursion can simplify the solution of a problem,
often resulting in shorter, more easily understood
source code
How do I write a
recursive function?
• Determine the size factor
• Determine the base case(s)
(the one for which you know the answer)
• Determine the general case(s)
(the one where the problem is expressed as a
smaller version of itself)
• Verify the algorithm
(use the "Three-Question-Method")
Three-Question Verification Method
1. The Base-Case Question:
Is there a nonrecursive way out of the function,
and does the routine work correctly for this
"base" case?
2. The Smaller-Caller Question:
Does each recursive call to the function involve a
smaller case of the original problem, leading
inescapably to the base case?
3. The General-Case Question:
Assuming that the recursive call(s) work
correctly, does the whole function work
correctly?
Recursive binary search
• Non-recursive implementation
template<class ItemType>
void SortedType<ItemType>::RetrieveItem(ItemType& item, bool& found)
{
int midPoint;
int first = 0;
int last = length - 1;
found = false;
while( (first <= last) && !found) {
midPoint = (first + last) / 2;
if (item < info[midPoint])
last = midPoint - 1;
else if(item > info[midPoint])
first = midPoint + 1;
else {
found = true;
item = info[midPoint];
}
}
• What is the size factor?
The number of elements in (info[first] ... info[last])
• What is the base case(s)?
(1) If first > last, return false
(2) If item==info[midPoint], return true
• What is the general case?
if item < info[midPoint] search the first half
if item > info[midPoint], search the second half
Recursive binary search (cont’d)
template<class ItemType>
bool BinarySearch(ItemType info[], ItemType& item, int first, int last)
{
int midPoint;
if(first > last) // base case 1
return false;
else {
midPoint = (first + last)/2;
if(item < info[midPoint])
return BinarySearch(info, item, first, midPoint-1);
else if (item == info[midPoint]) { // base case 2
item = info[midPoint];
return true;
}
else
return BinarySearch(info, item, midPoint+1, last);
}
}
Recursive binary search (cont’d)
template<class ItemType>
void SortedType<ItemType>::RetrieveItem
(ItemType& item, bool& found)
{
found = BinarySearch(info, item, 0, length-1);
}
Recursive binary search (cont’d)
How is recursion implemented?
• What happens when a function gets called?
int a(int w)
{
return w+w;
}
int b(int x)
{
int z,y;
……………… // other statements
z = a(x) + y;
return z;
}
What happens when a function is
called? (cont.)
• An activation record is stored into a stack (run-
time stack)
1) The computer has to stop executing function b and
starts executing function a
2) Since it needs to come back to function b later, it
needs to store everything about function b that is
going to need (x, y, z, and the place to start executing
upon return)
3) Then, x from a is bounded to w from b
4) Control is transferred to function a
• After function a is executed, the activation
record is popped out of the run-time stack
• All the old values of the parameters and
variables in function b are restored and the
return value of function a replaces a(x) in
the assignment statement
What happens when a
function is called? (cont.)
What happens when a recursive
function is called?
• Except the fact that the calling and called functions have
the same name, there is really no difference between
recursive and nonrecursive calls
int f(int x)
{
int y;
if(x==0)
return 1;
else {
y = 2 * f(x-1);
return y+1;
}
}
=f(3)
=f(2)
=f(1)
2*f(2)
2*f(1)
2*f(1)
=f(0)
Recursive InsertItem (sorted list)
location
location
location
location
• What is the size factor?
The number of elements in the current list
What is the base case(s)?
1) If the list is empty, insert item into the empty list
2) If item < location->info, insert item as the first
node in the current list
• What is the general case?
Insert(location->next, item)
Recursive InsertItem (sorted list)
template <class ItemType>
void Insert(NodeType<ItemType>* &location, ItemType item)
{
if(location == NULL) || (item < location->info)) { // base cases
NodeType<ItemType>* tempPtr = location;
location = new NodeType<ItemType>;
location->info = item;
location->next = tempPtr;
}
else
Insert(location->next, newItem); // general case
}
template <class ItemType>
void SortedType<ItemType>::InsertItem(ItemType newItem)
{
Insert(listData, newItem);
}
Recursive InsertItem (sorted list)
- No "predLoc" pointer is needed for insertion
location
Recursive DeleteItem (sorted list)
location
location
• What is the size factor?
The number of elements in the list
• What is the base case(s)?
If item == location->info, delete node
pointed by location
• What is the general case?
Delete(location->next, item)
Recursive DeleteItem (sorted list)
(cont.)
template <class ItemType>
void Delete(NodeType<ItemType>* &location, ItemType item)
{
if(item == location->info)) {
NodeType<ItemType>* tempPtr = location;
location = location->next;
delete tempPtr;
}
else
Delete(location->next, item);
}
template <class ItemType>
void SortedType<ItemType>::DeleteItem(ItemType item)
{
Delete(listData, item);
}
Recursive DeleteItem (sorted list)
(cont.)
Recursion can be very inefficient
is some cases
+
=
=
=
=
=
=
+ +
+ + + +
+
+ + + + +
+
+
+
+
+ + +
+ + + + + + +
+ +
+
+
+
+
+
+
+
+
+
3
3
Comb (3, 1)
2
Comb (2, 1)
1
Comb (2, 2)
Comb (3, 2)
Comb (4,2)
2
Comb (2, 1)
1
Comb (2, 2)
Comb (3, 2)
1
1
Comb (3, 3)
Comb (4, 3)
Comb (5, 3)
2
Comb (2, 1)
1
Comb (2, 2)
Comb (3, 2)
1
1
Comb (3, 3)
Comb (4, 3)
1
1
1
Comb (4, 4)
Comb (5, 4)
Comb (6,4)
15
Deciding whether to use a
recursive solution
• When the depth of recursive calls is
relatively "shallow"
• The recursive version does about the same
amount of work as the nonrecursive version
• The recursive version is shorter and simpler
than the nonrecursive solution
Exercises
• 7-12, 15

More Related Content

PDF
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
PPT
Data Structures- Part5 recursion
PPT
Recursion
PPTX
WT-Pravesh Sakhare.pptx
PPT
FRbsbsvvsvsvbshgsgsvzvsvvsvsvsvsvsvvev.ppt
PPTX
Searching and Sorting Algorithms in Data Structures
PPT
FUNDAMETAL ALG.ppt
PDF
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
Data Structures- Part5 recursion
Recursion
WT-Pravesh Sakhare.pptx
FRbsbsvvsvsvbshgsgsvzvsvvsvsvsvsvsvvev.ppt
Searching and Sorting Algorithms in Data Structures
FUNDAMETAL ALG.ppt
Functional Programming You Already Know - Kevlin Henney - Codemotion Rome 2015

Similar to Recursion.ppt (20)

DOCX
Required to augment the authors Binary Search Tree (BST) code to .docx
PPT
Fundamentalsofdatastructures 110501104205-phpapp02
PDF
Generics and data structures in Java for an introductory programming course
PDF
Introduction to Functional Programming
PPT
Tower of Hanoi.ppt
PPT
BinarySearchTrees.ppt
PPT
BinarySearchTrees (1).ppt
PPT
Binary searchtrees
PPT
BinarySearchTrees.ppt
PPT
data structure very BinarySearchTrees.ppt
PPT
BinarySearchTrees.ppt
PPT
M251_Meeting 9 (Recursion_AdvancedJava).ppt
PPTX
Chapter 2 Sorting and Searching .pptx.soft
PPTX
Ch 2Algo Analysis.pptxCh 2Algo Analysis.pptx
PDF
C++ Windows Forms L06 - Utlitity and Strings
PPT
recursion.ppt
PPT
Algorithm
PDF
singh singhsinghsinghsinghsinghsinghsinghsinghsingh.pdf
PPT
Algorithms with-java-advanced-1.0
PPTX
Data structures and algorithms
Required to augment the authors Binary Search Tree (BST) code to .docx
Fundamentalsofdatastructures 110501104205-phpapp02
Generics and data structures in Java for an introductory programming course
Introduction to Functional Programming
Tower of Hanoi.ppt
BinarySearchTrees.ppt
BinarySearchTrees (1).ppt
Binary searchtrees
BinarySearchTrees.ppt
data structure very BinarySearchTrees.ppt
BinarySearchTrees.ppt
M251_Meeting 9 (Recursion_AdvancedJava).ppt
Chapter 2 Sorting and Searching .pptx.soft
Ch 2Algo Analysis.pptxCh 2Algo Analysis.pptx
C++ Windows Forms L06 - Utlitity and Strings
recursion.ppt
Algorithm
singh singhsinghsinghsinghsinghsinghsinghsinghsingh.pdf
Algorithms with-java-advanced-1.0
Data structures and algorithms
Ad

Recently uploaded (20)

PPTX
mbdjdhjjodule 5-1 rhfhhfjtjjhafbrhfnfbbfnb
PPTX
Data_Analytics_and_PowerBI_Presentation.pptx
PPTX
Database Infoormation System (DBIS).pptx
PPTX
STUDY DESIGN details- Lt Col Maksud (21).pptx
PPTX
Introduction to machine learning and Linear Models
PDF
Business Analytics and business intelligence.pdf
PPTX
Supervised vs unsupervised machine learning algorithms
PDF
Fluorescence-microscope_Botany_detailed content
PPTX
The THESIS FINAL-DEFENSE-PRESENTATION.pptx
PPTX
iec ppt-1 pptx icmr ppt on rehabilitation.pptx
PPT
ISS -ESG Data flows What is ESG and HowHow
PPTX
advance b rammar.pptxfdgdfgdfsgdfgsdgfdfgdfgsdfgdfgdfg
PDF
TRAFFIC-MANAGEMENT-AND-ACCIDENT-INVESTIGATION-WITH-DRIVING-PDF-FILE.pdf
PPTX
Microsoft-Fabric-Unifying-Analytics-for-the-Modern-Enterprise Solution.pptx
PPTX
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
PDF
168300704-gasification-ppt.pdfhghhhsjsjhsuxush
PDF
Mega Projects Data Mega Projects Data
PDF
.pdf is not working space design for the following data for the following dat...
PDF
Clinical guidelines as a resource for EBP(1).pdf
PPTX
IBA_Chapter_11_Slides_Final_Accessible.pptx
mbdjdhjjodule 5-1 rhfhhfjtjjhafbrhfnfbbfnb
Data_Analytics_and_PowerBI_Presentation.pptx
Database Infoormation System (DBIS).pptx
STUDY DESIGN details- Lt Col Maksud (21).pptx
Introduction to machine learning and Linear Models
Business Analytics and business intelligence.pdf
Supervised vs unsupervised machine learning algorithms
Fluorescence-microscope_Botany_detailed content
The THESIS FINAL-DEFENSE-PRESENTATION.pptx
iec ppt-1 pptx icmr ppt on rehabilitation.pptx
ISS -ESG Data flows What is ESG and HowHow
advance b rammar.pptxfdgdfgdfsgdfgsdgfdfgdfgsdfgdfgdfg
TRAFFIC-MANAGEMENT-AND-ACCIDENT-INVESTIGATION-WITH-DRIVING-PDF-FILE.pdf
Microsoft-Fabric-Unifying-Analytics-for-the-Modern-Enterprise Solution.pptx
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
168300704-gasification-ppt.pdfhghhhsjsjhsuxush
Mega Projects Data Mega Projects Data
.pdf is not working space design for the following data for the following dat...
Clinical guidelines as a resource for EBP(1).pdf
IBA_Chapter_11_Slides_Final_Accessible.pptx
Ad

Recursion.ppt

  • 1. Recursion CS 308 – Data Structures
  • 2. What is recursion? • Sometimes, the best way to solve a problem is by solving a smaller version of the exact same problem first • Recursion is a technique that solves a problem by solving a smaller problem of the same type
  • 3. When you turn this into a program, you end up with functions that call themselves (recursive functions) int f(int x) { int y; if(x==0) return 1; else { y = 2 * f(x-1); return y+1; } }
  • 4. Problems defined recursively • There are many problems whose solution can be defined recursively Example: n factorial 1 if n = 0 n!= (recursive solution) (n-1)!*n if n > 0 1 if n = 0 n!= (closed form solution) 1*2*3*…*(n-1)*n if n > 0
  • 5. Coding the factorial function • Recursive implementation int Factorial(int n) { if (n==0) // base case return 1; else return n * Factorial(n-1); }
  • 7. Coding the factorial function (cont.) • Iterative implementation int Factorial(int n) { int fact = 1; for(int count = 2; count <= n; count++) fact = fact * count; return fact; }
  • 8. Another example: n choose k (combinations) • Given n things, how many different sets of size k can be chosen? n n-1 n-1 = + , 1 < k < n (recursive solution) k k k-1 n n! = , 1 < k < n (closed-form solution) k k!(n-k)! with base cases: n n = n (k = 1), = 1 (k = n) 1 n
  • 9. int Combinations(int n, int k) { if(k == 1) // base case 1 return n; else if (n == k) // base case 2 return 1; else return(Combinations(n-1, k) + Combinations(n-1, k-1)); } n choose k (combinations)
  • 11. Recursion vs. iteration • Iteration can be used in place of recursion – An iterative algorithm uses a looping construct – A recursive algorithm uses a branching structure • Recursive solutions are often less efficient, in terms of both time and space, than iterative solutions • Recursion can simplify the solution of a problem, often resulting in shorter, more easily understood source code
  • 12. How do I write a recursive function? • Determine the size factor • Determine the base case(s) (the one for which you know the answer) • Determine the general case(s) (the one where the problem is expressed as a smaller version of itself) • Verify the algorithm (use the "Three-Question-Method")
  • 13. Three-Question Verification Method 1. The Base-Case Question: Is there a nonrecursive way out of the function, and does the routine work correctly for this "base" case? 2. The Smaller-Caller Question: Does each recursive call to the function involve a smaller case of the original problem, leading inescapably to the base case? 3. The General-Case Question: Assuming that the recursive call(s) work correctly, does the whole function work correctly?
  • 14. Recursive binary search • Non-recursive implementation template<class ItemType> void SortedType<ItemType>::RetrieveItem(ItemType& item, bool& found) { int midPoint; int first = 0; int last = length - 1; found = false; while( (first <= last) && !found) { midPoint = (first + last) / 2; if (item < info[midPoint]) last = midPoint - 1; else if(item > info[midPoint]) first = midPoint + 1; else { found = true; item = info[midPoint]; } }
  • 15. • What is the size factor? The number of elements in (info[first] ... info[last]) • What is the base case(s)? (1) If first > last, return false (2) If item==info[midPoint], return true • What is the general case? if item < info[midPoint] search the first half if item > info[midPoint], search the second half Recursive binary search (cont’d)
  • 16. template<class ItemType> bool BinarySearch(ItemType info[], ItemType& item, int first, int last) { int midPoint; if(first > last) // base case 1 return false; else { midPoint = (first + last)/2; if(item < info[midPoint]) return BinarySearch(info, item, first, midPoint-1); else if (item == info[midPoint]) { // base case 2 item = info[midPoint]; return true; } else return BinarySearch(info, item, midPoint+1, last); } } Recursive binary search (cont’d)
  • 17. template<class ItemType> void SortedType<ItemType>::RetrieveItem (ItemType& item, bool& found) { found = BinarySearch(info, item, 0, length-1); } Recursive binary search (cont’d)
  • 18. How is recursion implemented? • What happens when a function gets called? int a(int w) { return w+w; } int b(int x) { int z,y; ……………… // other statements z = a(x) + y; return z; }
  • 19. What happens when a function is called? (cont.) • An activation record is stored into a stack (run- time stack) 1) The computer has to stop executing function b and starts executing function a 2) Since it needs to come back to function b later, it needs to store everything about function b that is going to need (x, y, z, and the place to start executing upon return) 3) Then, x from a is bounded to w from b 4) Control is transferred to function a
  • 20. • After function a is executed, the activation record is popped out of the run-time stack • All the old values of the parameters and variables in function b are restored and the return value of function a replaces a(x) in the assignment statement What happens when a function is called? (cont.)
  • 21. What happens when a recursive function is called? • Except the fact that the calling and called functions have the same name, there is really no difference between recursive and nonrecursive calls int f(int x) { int y; if(x==0) return 1; else { y = 2 * f(x-1); return y+1; } }
  • 23. Recursive InsertItem (sorted list) location location location location
  • 24. • What is the size factor? The number of elements in the current list What is the base case(s)? 1) If the list is empty, insert item into the empty list 2) If item < location->info, insert item as the first node in the current list • What is the general case? Insert(location->next, item) Recursive InsertItem (sorted list)
  • 25. template <class ItemType> void Insert(NodeType<ItemType>* &location, ItemType item) { if(location == NULL) || (item < location->info)) { // base cases NodeType<ItemType>* tempPtr = location; location = new NodeType<ItemType>; location->info = item; location->next = tempPtr; } else Insert(location->next, newItem); // general case } template <class ItemType> void SortedType<ItemType>::InsertItem(ItemType newItem) { Insert(listData, newItem); } Recursive InsertItem (sorted list)
  • 26. - No "predLoc" pointer is needed for insertion location
  • 27. Recursive DeleteItem (sorted list) location location
  • 28. • What is the size factor? The number of elements in the list • What is the base case(s)? If item == location->info, delete node pointed by location • What is the general case? Delete(location->next, item) Recursive DeleteItem (sorted list) (cont.)
  • 29. template <class ItemType> void Delete(NodeType<ItemType>* &location, ItemType item) { if(item == location->info)) { NodeType<ItemType>* tempPtr = location; location = location->next; delete tempPtr; } else Delete(location->next, item); } template <class ItemType> void SortedType<ItemType>::DeleteItem(ItemType item) { Delete(listData, item); } Recursive DeleteItem (sorted list) (cont.)
  • 30. Recursion can be very inefficient is some cases + = = = = = = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 3 Comb (3, 1) 2 Comb (2, 1) 1 Comb (2, 2) Comb (3, 2) Comb (4,2) 2 Comb (2, 1) 1 Comb (2, 2) Comb (3, 2) 1 1 Comb (3, 3) Comb (4, 3) Comb (5, 3) 2 Comb (2, 1) 1 Comb (2, 2) Comb (3, 2) 1 1 Comb (3, 3) Comb (4, 3) 1 1 1 Comb (4, 4) Comb (5, 4) Comb (6,4) 15
  • 31. Deciding whether to use a recursive solution • When the depth of recursive calls is relatively "shallow" • The recursive version does about the same amount of work as the nonrecursive version • The recursive version is shorter and simpler than the nonrecursive solution