SlideShare a Scribd company logo
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 (20)

PPT
4 recursion details
Abhijit Gaikwad
 
PPT
Cis068 08
FALLEE31188
 
PPT
Algorithms Binary Search recursion ppt BSIT
emmanuelsolabo07
 
PPT
FRbsbsvvsvsvbshgsgsvzvsvvsvsvsvsvsvvev.ppt
hassannadim591
 
PDF
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
donotreply20
 
PPTX
Recursion in Data Structure
khudabux1998
 
PPT
Ap Power Point Chpt8
dplunkett
 
PPT
Chapter 13 - Recursion
Adan Hubahib
 
PPT
Database structure Structures Link list and trees and Recurison complete
Adnan abid
 
PDF
L1 - Recap.pdf
Ifat Nix
 
PPT
Chap14
Terry Yoast
 
PPT
Trees
Susheel Thakur
 
PDF
Programming in Java: Recursion
Martin Chapman
 
PPTX
Recursion is used in programming languages to use a procedure multiple times ...
najiyanasrink
 
PPT
9781111530532 ppt ch13
Terry Yoast
 
PPT
Chapter 13
Terry Yoast
 
PPTX
Recursion.pptx
VijalJain3
 
PPT
Data structures &amp;algorithms
Nur Saleha
 
PPTX
Presentation on Elementary data structures
Kuber Chandra
 
4 recursion details
Abhijit Gaikwad
 
Cis068 08
FALLEE31188
 
Algorithms Binary Search recursion ppt BSIT
emmanuelsolabo07
 
FRbsbsvvsvsvbshgsgsvzvsvvsvsvsvsvsvvev.ppt
hassannadim591
 
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
donotreply20
 
Recursion in Data Structure
khudabux1998
 
Ap Power Point Chpt8
dplunkett
 
Chapter 13 - Recursion
Adan Hubahib
 
Database structure Structures Link list and trees and Recurison complete
Adnan abid
 
L1 - Recap.pdf
Ifat Nix
 
Chap14
Terry Yoast
 
Programming in Java: Recursion
Martin Chapman
 
Recursion is used in programming languages to use a procedure multiple times ...
najiyanasrink
 
9781111530532 ppt ch13
Terry Yoast
 
Chapter 13
Terry Yoast
 
Recursion.pptx
VijalJain3
 
Data structures &amp;algorithms
Nur Saleha
 
Presentation on Elementary data structures
Kuber Chandra
 

Recently uploaded (20)

PPSX
HEALTH ASSESSMENT (Community Health Nursing) - GNM 1st Year
Priyanshu Anand
 
PDF
Women's Health: Essential Tips for Every Stage.pdf
Iftikhar Ahmed
 
PDF
The Different Types of Non-Experimental Research
Thelma Villaflores
 
PPTX
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
PPT
Talk on Critical Theory, Part II, Philosophy of Social Sciences
Soraj Hongladarom
 
PDF
SSHS-2025-PKLP_Quarter-1-Dr.-Kerby-Alvarez.pdf
AishahSangcopan1
 
PPTX
PATIENT ASSIGNMENTS AND NURSING CARE RESPONSIBILITIES.pptx
PRADEEP ABOTHU
 
PDF
DIGESTION OF CARBOHYDRATES,PROTEINS,LIPIDS
raviralanaresh2
 
PDF
community health nursing question paper 2.pdf
Prince kumar
 
PPTX
2025 Winter SWAYAM NPTEL & A Student.pptx
Utsav Yagnik
 
PDF
Biological Bilingual Glossary Hindi and English Medium
World of Wisdom
 
PPTX
How to Manage Large Scrollbar in Odoo 18 POS
Celine George
 
PDF
Stokey: A Jewish Village by Rachel Kolsky
History of Stoke Newington
 
PDF
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
PPTX
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
PPTX
MENINGITIS: NURSING MANAGEMENT, BACTERIAL MENINGITIS, VIRAL MENINGITIS.pptx
PRADEEP ABOTHU
 
PDF
The-Ever-Evolving-World-of-Science (1).pdf/7TH CLASS CURIOSITY /1ST CHAPTER/B...
Sandeep Swamy
 
PPTX
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
PDF
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
PDF
LAW OF CONTRACT (5 YEAR LLB & UNITARY LLB )- MODULE - 1.& 2 - LEARN THROUGH P...
APARNA T SHAIL KUMAR
 
HEALTH ASSESSMENT (Community Health Nursing) - GNM 1st Year
Priyanshu Anand
 
Women's Health: Essential Tips for Every Stage.pdf
Iftikhar Ahmed
 
The Different Types of Non-Experimental Research
Thelma Villaflores
 
HYDROCEPHALUS: NURSING MANAGEMENT .pptx
PRADEEP ABOTHU
 
Talk on Critical Theory, Part II, Philosophy of Social Sciences
Soraj Hongladarom
 
SSHS-2025-PKLP_Quarter-1-Dr.-Kerby-Alvarez.pdf
AishahSangcopan1
 
PATIENT ASSIGNMENTS AND NURSING CARE RESPONSIBILITIES.pptx
PRADEEP ABOTHU
 
DIGESTION OF CARBOHYDRATES,PROTEINS,LIPIDS
raviralanaresh2
 
community health nursing question paper 2.pdf
Prince kumar
 
2025 Winter SWAYAM NPTEL & A Student.pptx
Utsav Yagnik
 
Biological Bilingual Glossary Hindi and English Medium
World of Wisdom
 
How to Manage Large Scrollbar in Odoo 18 POS
Celine George
 
Stokey: A Jewish Village by Rachel Kolsky
History of Stoke Newington
 
Reconstruct, Restore, Reimagine: New Perspectives on Stoke Newington’s Histor...
History of Stoke Newington
 
Universal immunization Programme (UIP).pptx
Vishal Chanalia
 
MENINGITIS: NURSING MANAGEMENT, BACTERIAL MENINGITIS, VIRAL MENINGITIS.pptx
PRADEEP ABOTHU
 
The-Ever-Evolving-World-of-Science (1).pdf/7TH CLASS CURIOSITY /1ST CHAPTER/B...
Sandeep Swamy
 
ASRB NET 2023 PREVIOUS YEAR QUESTION PAPER GENETICS AND PLANT BREEDING BY SAT...
Krashi Coaching
 
CONCURSO DE POESIA “POETUFAS – PASSOS SUAVES PELO VERSO.pdf
Colégio Santa Teresinha
 
LAW OF CONTRACT (5 YEAR LLB & UNITARY LLB )- MODULE - 1.& 2 - LEARN THROUGH P...
APARNA T SHAIL KUMAR
 
Ad

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