SlideShare a Scribd company logo
1 of 25
Data Structures and Algorithms in Java
3. Recursion
1/25
Data Structures and Algorithms in Java
Objectives
• Recursive definition
• Recursive program/algorithm
• Recursion application
• Method calls and recursion implementation
• Anatomy of a recursive call
• Classify recursions by number of recursive calls
• Tail recursion
• Non-tail recursion
• Indirect recursion
• Nested recursion
• Excessive recursion
2/25
Data Structures and Algorithms in Java
Recursive definition
• Wikipedia: “A recursive definition or inductive definition is one that
defines something in terms of itself (that is, recursively). For it to
work, the definition in any given case must be well-founded,
avoiding an infinite regress”.
• A recursive definition consists of at least 2 parts:
1) A base case (anchor or the ground case) that does not contain a
reference to its own type.
2) An inductive case that does contain a reference to its own type.
For example: Define the set of natural numbers
N
set
the
in
objects
other
no
are
there
N
n
then
N
n
if
N
.
3
)
1
(
,
.
2
0
.
1




3/25
Data Structures and Algorithms in Java
Some other examples for recursive definition
1 if n = 0 (anchor)
n*(n-1)! if n>0 (inductive step)
n! =
• The Fibonacci sequence of natural numbers:
n if n<2
fibo(n-1) +fibo(n-2) otherwise
fibo(n) =
• The Factorial of a natural number:
4/25
Data Structures and Algorithms in Java 5/27
Recursive program/algorithm - 1
One way to describe repetition within a computer program is the
use of loops, such as Java’s while-loop and for-loop constructs. An
entirely different way to achieve repetition is through a process
known as recursion. Recursion is a technique by which a method
makes one or more calls to itself during execution, or by which a
data structure relies upon smaller instances of the very same type
of structure in its representation. In computing, recursion provides
an elegant and powerful alternative for performing repetitive tasks.
Most modern programming languages support functional recursion
using the identical mechanism that is used to support traditional
forms of method calls. When one invocation of the method makes a
recursive call, that invocation is suspended until the recursive call
completes. Recursion is an important technique in the study of data
structures and algorithms.
Data Structures and Algorithms in Java 6/27
Recursive program/algorithm - 2
A recursive program/algorithm is one that calls itself again.
There are three basic rules for developing recursive algorithms.
• Know how to take one step.
• Break each problem down into one step plus a smaller
problem.
• Know how and when to stop.
Example for recursive program:
public static void DecToBin(int n)
{ int q = n/2; // One step
int r = n%2; // One step
if (q > 0)
{DecToBin(q); // smaller problem
}
System.out.print(r); // after all recursive calls have been
// made last remainder printed first
}
Data Structures and Algorithms in Java 7/27
Recursion application
• Recursive definitions are used in defining
functions or sequences of elements
• Purpose of recursive definition:
– Generating a new elements
– Testing whether an element belongs to a set (*)
• (*) The problem is solved by reducing it to a
simpler problem
Data Structures and Algorithms in Java 8/27
Method calls and recursion implementation - 1
Each time a method is called, an activation record (AR) is allocated for it.
This record usually contains the following information:
• Parameters and local variables used in the called method.
• A dynamic link, which is a pointer to the caller's activation record.
• Return address to resume control by the caller, the address of the
caller’s instruction immediately following the call.
• Return value for a method not declared as void. Because the size of the
activation record may vary from one call to another, the returned value is
placed right above the activation record of the caller.
Each new activation record is placed on the top of the run-time stack
When a method terminates, its activation record is removed from the top
of the run-time stack
Thus, the first AR placed onto the stack is the last one removed
Data Structures and Algorithms in Java 9/27
Creating an activation record whenever a method is
called allows the system to handle recursion
properly. Recursion is calling a method that happens
to have the same name as the caller. Therefore, a
recursive call is not literally a method calling it-self,
but rather an instantiation of a method calling
another instantiation of the same original. These
invocation are represented internally by different
activation records and are thus differentiated by the
system.
Method calls and recursion implementation - 2
Data Structures and Algorithms in Java 10/27
Anatomy of a recursive Call
N = 4
N <= 1? NO
return (4 * factorial (3)) =
N = 3
N <= 1? NO
return (3 * factorial (2)) =
N = 2
N <= 1? NO
return (2 * factorial (1)) =
N = 1
N <= 1? YES
Return (1)
factorial(4)
factorial(3)
factorial(2)
factorial(1)
2
6
24
1
1
2
6
24
First call
Data Structures and Algorithms in Java 11/27
Classification of recursive functions by number
of recursive calls
Considering the maximum number of recursive calls
within the body of a single activation, there are 3 types
of recursions.
• Linear recursion: Only 1 recursive call (to itself) in side
the recursive function (e.g. binary search).
• Binary recursion: There exactly 2 recursive calls (to
itself) in side the recursive function (e.g. Fibonacci
number) .
• Multiple recursion: There are 3 or more recursive calls
(to itself) in side the recursive function.
Data Structures and Algorithms in Java 12/27
Tail recursion
• There is only one recursive call at the very end
of a method implementation
Other classification of recursions
class Main
{static void tail(int n)
{if(n >0)
{ System.out.print(n + " ");
tail(n-1);
}
}
public static void main(String [] args)
{tail(10);
System.out.println();
}
}
void nonTail (int i)
{ if (i > 0)
{tail(i-1);
System.out.print (i + "");
tail(i-1);
}
}
Data Structures and Algorithms in Java 13/27
Non-tail recursion
• The recursive call is not at the very end of a method
implementation
public class Main
{public static void reverse() throws Exception
{char ch = (char) System.in.read();
if(ch != 'n')
{reverse();
System.out.print(ch);
}
}
public static void main(String [] args) throws Exception
{System.out.println("nEnter a string to be reversed:");
reverse();
System.out.println("n");
}
}
Data Structures and Algorithms in Java 14/27
Convert recursion implementation
to iterative implementation using stack
{public static void nonRecursiveReverse() throws Exception
{MyStack t = new MyStack();
char ch;
while(true)
{ch = (char) System.in.read();
if(ch == 'n') break;
t.push(ch);
}
while(!t.isEmpty())
System.out.print(t.pop());
}
Data Structures and Algorithms in Java 15/27
Indirect recursion
• If f() calls itself, it is direct recursive
• If f() calls g(), and g() calls f(). It is indirect recursion. The chain of
intermediate calls can be of an arbitrary length, as in:
f() -> f1() -> f2() -> ... -> fn() -> f()
• Example: sin(x) calculation
Recursive call tree for sin(x)
sin(x)
sin(x/3) tan(x/3) tan(x/3)
sin(x/3) cos(x/3) sin(x/3) cos(x)
sin(x/6) sin(x/6)
Data Structures and Algorithms in Java 16/27
Nested recursion
• A function is not only defined in terms of itself but also is
used as one of the parameters
• Consider the following examples:
0 if n=0
n if n>4
h(2 +h(2n)) if n<=4
Another example of nested recursive recursion is
Ackermann’s function:
A(0, y) = y + 1
A(x, 0) = A(x - 1, 1)
A(x, y) = A(x - 1, A(x, y - 1))
h(n) =
This function is interesting because of
its remarkably rapid growth.
A(3,1) = 24 - 3
A(4,1) = 265536 - 3
Data Structures and Algorithms in Java 17/27
Excessive recursion - 1
• Consider the Fibonacci sequence of numbers
n if n<2
fibo(n-1) +fibo(n-2) otherwise
static long fibo(long n)
{if (n<2)
return n;
else
return(fibo(n-1)+fibo(n-2));
}
This
implementation
looks very natural
but extremely
inefficient!
fibo(n) =
Data Structures and Algorithms in Java 18/27
The tree of calls for fibo(4)
18
Fib(4)
Fib(2) Fib(3)
Fib(0) Fib(1)
1
0
Fib(2)
Fib(0) Fib(1)
1
0
Fib(1)
1
Excessive recursion - 2
Data Structures and Algorithms in Java 19/27
More Examples – The Tower of Hanoi
19
• Rules:
Only one disk may be moved at a time.
Each move consists of taking the upper disk from one
of the rods and sliding it onto another rod, on top of
the other disks that may already be present on that
rod.
No disk may be placed on top of a smaller disk.
Source: http://en.wikipedia.org/wiki/Hanoi_tower
Data Structures and Algorithms in Java 20/27
More Examples – The Tower of Hanoi
Algorithm
20
void moveDisks(int n, char fromTower, char toTower, char auxTower)
{if (n == 1) // Stopping condition
Move disk 1 from the fromTower to the toTower;
else
{moveDisks(n - 1, fromTower, auxTower, toTower);
move disk n from the fromTower to the toTower;
moveDisks(n - 1, auxTower, toTower, fromTower);
}
}
Data Structures and Algorithms in Java 21/27
More Examples – Drawing fractals
21
Data Structures and Algorithms in Java 22/27
1. Divide an interval side into three even parts
2. Move one-third of side in the direction
specified by angle
Examples of von Koch snowflakes
More Examples – Von Knoch snowflakes
Data Structures and Algorithms in Java 23/27
Recursion vs. Iteration
23
• Some recursive algorithms can also be easily
implemented with loops
– When possible, it is usually better to use iteration,
since we don’t have the overhead of the run-time stack
(that we just saw on the previous slide)
• Other recursive algorithms are very difficult to
do any other way
Data Structures and Algorithms in Java 24/27
Summary
• Recursive definitions are programming concepts that
define themselves
• Recursive definitions serve two purposes:
– Generating new elements
– Testing whether an element belongs to a set
• Recursive definitions are frequently used to define
functions and sequences of numbers
• Tail recursion is characterized by the use of only one
recursive call at the very end of a method
implementation.
Data Structures and Algorithms in Java 25/25
Reading at home
Text book: Data Structures and Algorithms in Java
5 Recursion 189
5.1 Illustrative Examples - 191
5.1.1 The Factorial Function -191
5.1.3 Binary Search - 196
5.1.4 File Systems - 198
5.2 Analyzing Recursive Algorithms - 202
5.3 Further Examples of Recursion - 206
5.3.1 Linear Recursion - 206
5.3.2 Binary Recursion - . 211
5.3.3 Multiple Recursion - 212
5.4 Designing Recursive Algorithms - 214
5.6 Eliminating Tail Recursion -. 219

More Related Content

Similar to 3-Recursion.ppt

Data structure and algorithm using java
Data structure and algorithm using javaData structure and algorithm using java
Data structure and algorithm using javaNarayan Sau
 
Recursion and Sorting Algorithms
Recursion and Sorting AlgorithmsRecursion and Sorting Algorithms
Recursion and Sorting AlgorithmsAfaq Mansoor Khan
 
Data Structures in C
Data Structures in CData Structures in C
Data Structures in CJabs6
 
Core java concepts
Core    java  conceptsCore    java  concepts
Core java conceptsChikugehlot
 
DSJ_Unit I & II.pdf
DSJ_Unit I & II.pdfDSJ_Unit I & II.pdf
DSJ_Unit I & II.pdfArumugam90
 
Recursion(Advanced data structure)
Recursion(Advanced data structure)Recursion(Advanced data structure)
Recursion(Advanced data structure)kurubameena1
 
Advanced data structures using c++ 3
Advanced data structures using c++ 3Advanced data structures using c++ 3
Advanced data structures using c++ 3Shaili Choudhary
 
DATA STRUCTURES unit 1.pptx
DATA STRUCTURES unit 1.pptxDATA STRUCTURES unit 1.pptx
DATA STRUCTURES unit 1.pptxShivamKrPathak
 
Charles Sharp: Java 8 Streams
Charles Sharp: Java 8 StreamsCharles Sharp: Java 8 Streams
Charles Sharp: Java 8 Streamsjessitron
 
Programming in python
Programming in pythonProgramming in python
Programming in pythonIvan Rojas
 
Machine Learning Algorithms (Part 1)
Machine Learning Algorithms (Part 1)Machine Learning Algorithms (Part 1)
Machine Learning Algorithms (Part 1)Zihui Li
 
CS301-lec01.ppt
CS301-lec01.pptCS301-lec01.ppt
CS301-lec01.pptomair31
 
09 implementing+subprograms
09 implementing+subprograms09 implementing+subprograms
09 implementing+subprogramsbaran19901990
 
Lecture 25
Lecture 25Lecture 25
Lecture 25Shani729
 
L1 - Recap.pdf
L1 - Recap.pdfL1 - Recap.pdf
L1 - Recap.pdfIfat Nix
 

Similar to 3-Recursion.ppt (20)

R Basics
R BasicsR Basics
R Basics
 
Data structure and algorithm using java
Data structure and algorithm using javaData structure and algorithm using java
Data structure and algorithm using java
 
Recursion and Sorting Algorithms
Recursion and Sorting AlgorithmsRecursion and Sorting Algorithms
Recursion and Sorting Algorithms
 
Data Structures in C
Data Structures in CData Structures in C
Data Structures in C
 
Core java concepts
Core    java  conceptsCore    java  concepts
Core java concepts
 
DSJ_Unit I & II.pdf
DSJ_Unit I & II.pdfDSJ_Unit I & II.pdf
DSJ_Unit I & II.pdf
 
Recursion(Advanced data structure)
Recursion(Advanced data structure)Recursion(Advanced data structure)
Recursion(Advanced data structure)
 
Advanced data structures using c++ 3
Advanced data structures using c++ 3Advanced data structures using c++ 3
Advanced data structures using c++ 3
 
DATA STRUCTURES unit 1.pptx
DATA STRUCTURES unit 1.pptxDATA STRUCTURES unit 1.pptx
DATA STRUCTURES unit 1.pptx
 
Charles Sharp: Java 8 Streams
Charles Sharp: Java 8 StreamsCharles Sharp: Java 8 Streams
Charles Sharp: Java 8 Streams
 
Programming in python
Programming in pythonProgramming in python
Programming in python
 
Machine Learning Algorithms (Part 1)
Machine Learning Algorithms (Part 1)Machine Learning Algorithms (Part 1)
Machine Learning Algorithms (Part 1)
 
Data Structure Lec #1
Data Structure Lec #1Data Structure Lec #1
Data Structure Lec #1
 
recursion.ppt
recursion.pptrecursion.ppt
recursion.ppt
 
CS301-lec01.ppt
CS301-lec01.pptCS301-lec01.ppt
CS301-lec01.ppt
 
Recursion
RecursionRecursion
Recursion
 
09 implementing+subprograms
09 implementing+subprograms09 implementing+subprograms
09 implementing+subprograms
 
Recursion
RecursionRecursion
Recursion
 
Lecture 25
Lecture 25Lecture 25
Lecture 25
 
L1 - Recap.pdf
L1 - Recap.pdfL1 - Recap.pdf
L1 - Recap.pdf
 

Recently uploaded

Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...Sapna Thakur
 
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDThiyagu K
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room servicediscovermytutordmt
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 

Recently uploaded (20)

Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
 
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SD
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room service
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 

3-Recursion.ppt

  • 1. Data Structures and Algorithms in Java 3. Recursion 1/25
  • 2. Data Structures and Algorithms in Java Objectives • Recursive definition • Recursive program/algorithm • Recursion application • Method calls and recursion implementation • Anatomy of a recursive call • Classify recursions by number of recursive calls • Tail recursion • Non-tail recursion • Indirect recursion • Nested recursion • Excessive recursion 2/25
  • 3. Data Structures and Algorithms in Java Recursive definition • Wikipedia: “A recursive definition or inductive definition is one that defines something in terms of itself (that is, recursively). For it to work, the definition in any given case must be well-founded, avoiding an infinite regress”. • A recursive definition consists of at least 2 parts: 1) A base case (anchor or the ground case) that does not contain a reference to its own type. 2) An inductive case that does contain a reference to its own type. For example: Define the set of natural numbers N set the in objects other no are there N n then N n if N . 3 ) 1 ( , . 2 0 . 1     3/25
  • 4. Data Structures and Algorithms in Java Some other examples for recursive definition 1 if n = 0 (anchor) n*(n-1)! if n>0 (inductive step) n! = • The Fibonacci sequence of natural numbers: n if n<2 fibo(n-1) +fibo(n-2) otherwise fibo(n) = • The Factorial of a natural number: 4/25
  • 5. Data Structures and Algorithms in Java 5/27 Recursive program/algorithm - 1 One way to describe repetition within a computer program is the use of loops, such as Java’s while-loop and for-loop constructs. An entirely different way to achieve repetition is through a process known as recursion. Recursion is a technique by which a method makes one or more calls to itself during execution, or by which a data structure relies upon smaller instances of the very same type of structure in its representation. In computing, recursion provides an elegant and powerful alternative for performing repetitive tasks. Most modern programming languages support functional recursion using the identical mechanism that is used to support traditional forms of method calls. When one invocation of the method makes a recursive call, that invocation is suspended until the recursive call completes. Recursion is an important technique in the study of data structures and algorithms.
  • 6. Data Structures and Algorithms in Java 6/27 Recursive program/algorithm - 2 A recursive program/algorithm is one that calls itself again. There are three basic rules for developing recursive algorithms. • Know how to take one step. • Break each problem down into one step plus a smaller problem. • Know how and when to stop. Example for recursive program: public static void DecToBin(int n) { int q = n/2; // One step int r = n%2; // One step if (q > 0) {DecToBin(q); // smaller problem } System.out.print(r); // after all recursive calls have been // made last remainder printed first }
  • 7. Data Structures and Algorithms in Java 7/27 Recursion application • Recursive definitions are used in defining functions or sequences of elements • Purpose of recursive definition: – Generating a new elements – Testing whether an element belongs to a set (*) • (*) The problem is solved by reducing it to a simpler problem
  • 8. Data Structures and Algorithms in Java 8/27 Method calls and recursion implementation - 1 Each time a method is called, an activation record (AR) is allocated for it. This record usually contains the following information: • Parameters and local variables used in the called method. • A dynamic link, which is a pointer to the caller's activation record. • Return address to resume control by the caller, the address of the caller’s instruction immediately following the call. • Return value for a method not declared as void. Because the size of the activation record may vary from one call to another, the returned value is placed right above the activation record of the caller. Each new activation record is placed on the top of the run-time stack When a method terminates, its activation record is removed from the top of the run-time stack Thus, the first AR placed onto the stack is the last one removed
  • 9. Data Structures and Algorithms in Java 9/27 Creating an activation record whenever a method is called allows the system to handle recursion properly. Recursion is calling a method that happens to have the same name as the caller. Therefore, a recursive call is not literally a method calling it-self, but rather an instantiation of a method calling another instantiation of the same original. These invocation are represented internally by different activation records and are thus differentiated by the system. Method calls and recursion implementation - 2
  • 10. Data Structures and Algorithms in Java 10/27 Anatomy of a recursive Call N = 4 N <= 1? NO return (4 * factorial (3)) = N = 3 N <= 1? NO return (3 * factorial (2)) = N = 2 N <= 1? NO return (2 * factorial (1)) = N = 1 N <= 1? YES Return (1) factorial(4) factorial(3) factorial(2) factorial(1) 2 6 24 1 1 2 6 24 First call
  • 11. Data Structures and Algorithms in Java 11/27 Classification of recursive functions by number of recursive calls Considering the maximum number of recursive calls within the body of a single activation, there are 3 types of recursions. • Linear recursion: Only 1 recursive call (to itself) in side the recursive function (e.g. binary search). • Binary recursion: There exactly 2 recursive calls (to itself) in side the recursive function (e.g. Fibonacci number) . • Multiple recursion: There are 3 or more recursive calls (to itself) in side the recursive function.
  • 12. Data Structures and Algorithms in Java 12/27 Tail recursion • There is only one recursive call at the very end of a method implementation Other classification of recursions class Main {static void tail(int n) {if(n >0) { System.out.print(n + " "); tail(n-1); } } public static void main(String [] args) {tail(10); System.out.println(); } } void nonTail (int i) { if (i > 0) {tail(i-1); System.out.print (i + ""); tail(i-1); } }
  • 13. Data Structures and Algorithms in Java 13/27 Non-tail recursion • The recursive call is not at the very end of a method implementation public class Main {public static void reverse() throws Exception {char ch = (char) System.in.read(); if(ch != 'n') {reverse(); System.out.print(ch); } } public static void main(String [] args) throws Exception {System.out.println("nEnter a string to be reversed:"); reverse(); System.out.println("n"); } }
  • 14. Data Structures and Algorithms in Java 14/27 Convert recursion implementation to iterative implementation using stack {public static void nonRecursiveReverse() throws Exception {MyStack t = new MyStack(); char ch; while(true) {ch = (char) System.in.read(); if(ch == 'n') break; t.push(ch); } while(!t.isEmpty()) System.out.print(t.pop()); }
  • 15. Data Structures and Algorithms in Java 15/27 Indirect recursion • If f() calls itself, it is direct recursive • If f() calls g(), and g() calls f(). It is indirect recursion. The chain of intermediate calls can be of an arbitrary length, as in: f() -> f1() -> f2() -> ... -> fn() -> f() • Example: sin(x) calculation Recursive call tree for sin(x) sin(x) sin(x/3) tan(x/3) tan(x/3) sin(x/3) cos(x/3) sin(x/3) cos(x) sin(x/6) sin(x/6)
  • 16. Data Structures and Algorithms in Java 16/27 Nested recursion • A function is not only defined in terms of itself but also is used as one of the parameters • Consider the following examples: 0 if n=0 n if n>4 h(2 +h(2n)) if n<=4 Another example of nested recursive recursion is Ackermann’s function: A(0, y) = y + 1 A(x, 0) = A(x - 1, 1) A(x, y) = A(x - 1, A(x, y - 1)) h(n) = This function is interesting because of its remarkably rapid growth. A(3,1) = 24 - 3 A(4,1) = 265536 - 3
  • 17. Data Structures and Algorithms in Java 17/27 Excessive recursion - 1 • Consider the Fibonacci sequence of numbers n if n<2 fibo(n-1) +fibo(n-2) otherwise static long fibo(long n) {if (n<2) return n; else return(fibo(n-1)+fibo(n-2)); } This implementation looks very natural but extremely inefficient! fibo(n) =
  • 18. Data Structures and Algorithms in Java 18/27 The tree of calls for fibo(4) 18 Fib(4) Fib(2) Fib(3) Fib(0) Fib(1) 1 0 Fib(2) Fib(0) Fib(1) 1 0 Fib(1) 1 Excessive recursion - 2
  • 19. Data Structures and Algorithms in Java 19/27 More Examples – The Tower of Hanoi 19 • Rules: Only one disk may be moved at a time. Each move consists of taking the upper disk from one of the rods and sliding it onto another rod, on top of the other disks that may already be present on that rod. No disk may be placed on top of a smaller disk. Source: http://en.wikipedia.org/wiki/Hanoi_tower
  • 20. Data Structures and Algorithms in Java 20/27 More Examples – The Tower of Hanoi Algorithm 20 void moveDisks(int n, char fromTower, char toTower, char auxTower) {if (n == 1) // Stopping condition Move disk 1 from the fromTower to the toTower; else {moveDisks(n - 1, fromTower, auxTower, toTower); move disk n from the fromTower to the toTower; moveDisks(n - 1, auxTower, toTower, fromTower); } }
  • 21. Data Structures and Algorithms in Java 21/27 More Examples – Drawing fractals 21
  • 22. Data Structures and Algorithms in Java 22/27 1. Divide an interval side into three even parts 2. Move one-third of side in the direction specified by angle Examples of von Koch snowflakes More Examples – Von Knoch snowflakes
  • 23. Data Structures and Algorithms in Java 23/27 Recursion vs. Iteration 23 • Some recursive algorithms can also be easily implemented with loops – When possible, it is usually better to use iteration, since we don’t have the overhead of the run-time stack (that we just saw on the previous slide) • Other recursive algorithms are very difficult to do any other way
  • 24. Data Structures and Algorithms in Java 24/27 Summary • Recursive definitions are programming concepts that define themselves • Recursive definitions serve two purposes: – Generating new elements – Testing whether an element belongs to a set • Recursive definitions are frequently used to define functions and sequences of numbers • Tail recursion is characterized by the use of only one recursive call at the very end of a method implementation.
  • 25. Data Structures and Algorithms in Java 25/25 Reading at home Text book: Data Structures and Algorithms in Java 5 Recursion 189 5.1 Illustrative Examples - 191 5.1.1 The Factorial Function -191 5.1.3 Binary Search - 196 5.1.4 File Systems - 198 5.2 Analyzing Recursive Algorithms - 202 5.3 Further Examples of Recursion - 206 5.3.1 Linear Recursion - 206 5.3.2 Binary Recursion - . 211 5.3.3 Multiple Recursion - 212 5.4 Designing Recursive Algorithms - 214 5.6 Eliminating Tail Recursion -. 219