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

PPTX
(Recursion)ads
PDF
Recursion Pattern Analysis and Feedback
PPTX
Recursion and Sorting Algorithms
PPT
Recursion - Algorithms and Data Structures
PPT
Ch10 Recursion
PPTX
Recursion(Advanced data structure)
PDF
Iterations and Recursions
PPTX
Recursion
(Recursion)ads
Recursion Pattern Analysis and Feedback
Recursion and Sorting Algorithms
Recursion - Algorithms and Data Structures
Ch10 Recursion
Recursion(Advanced data structure)
Iterations and Recursions
Recursion

What's hot (20)

PPT
Recursion and looping
PPT
Data Structures- Part5 recursion
PPT
Data Structures- Part2 analysis tools
PPT
CS8451 - Design and Analysis of Algorithms
PPT
Chapter 4 ds
PPT
Chapter 7 ds
PPT
Recursion
PPT
Introduction to Algorithms
PPT
Chapter 10 ds
PPT
Chapter 2 ds
PPT
Data Structure and Algorithms
PDF
Iteration, induction, and recursion
PPTX
Recursion
PPTX
Algorithm & data structure lec2
PPT
Cis435 week04
PPTX
Introduction to datastructure and algorithm
PDF
Design & Analysis Of Algorithm
PDF
DATA STRUCTURE AND ALGORITHM FULL NOTES
PPT
Cis068 08
PPTX
Algorithm Complexity and Main Concepts
Recursion and looping
Data Structures- Part5 recursion
Data Structures- Part2 analysis tools
CS8451 - Design and Analysis of Algorithms
Chapter 4 ds
Chapter 7 ds
Recursion
Introduction to Algorithms
Chapter 10 ds
Chapter 2 ds
Data Structure and Algorithms
Iteration, induction, and recursion
Recursion
Algorithm & data structure lec2
Cis435 week04
Introduction to datastructure and algorithm
Design & Analysis Of Algorithm
DATA STRUCTURE AND ALGORITHM FULL NOTES
Cis068 08
Algorithm Complexity and Main Concepts
Ad

Similar to 3 recursion (20)

PPTX
8. Recursion.pptx
PDF
Lesson 6 recursion
PPT
FUNDAMETAL ALG.ppt
PPT
Ppt chapter12
PPTX
Core Java and Data Structure using C++.pptx
PDF
DSAsunbeam pdf useful for cceegot did it and enjoy.pdf
PPT
4 recursion details
PPT
Algorithms Binary Search recursion ppt BSIT
PPT
FRbsbsvvsvsvbshgsgsvzvsvvsvsvsvsvsvvev.ppt
PDF
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
PPTX
Recursion in Data Structure
PPT
Ap Power Point Chpt8
PPT
Chapter 13 - Recursion
PPT
Database structure Structures Link list and trees and Recurison complete
PDF
L1 - Recap.pdf
PPT
Chap14
PPT
PDF
Programming in Java: Recursion
PPTX
Recursion is used in programming languages to use a procedure multiple times ...
8. Recursion.pptx
Lesson 6 recursion
FUNDAMETAL ALG.ppt
Ppt chapter12
Core Java and Data Structure using C++.pptx
DSAsunbeam pdf useful for cceegot did it and enjoy.pdf
4 recursion details
Algorithms Binary Search recursion ppt BSIT
FRbsbsvvsvsvbshgsgsvzvsvvsvsvsvsvsvvev.ppt
Data Structure - Lecture 2 - Recursion Stack Queue.pdf
Recursion in Data Structure
Ap Power Point Chpt8
Chapter 13 - Recursion
Database structure Structures Link list and trees and Recurison complete
L1 - Recap.pdf
Chap14
Programming in Java: Recursion
Recursion is used in programming languages to use a procedure multiple times ...
Ad

Recently uploaded (20)

PPTX
2. Earth - The Living Planet Module 2ELS
PPTX
2Systematics of Living Organisms t-.pptx
PPTX
BIOMOLECULES PPT........................
PDF
VARICELLA VACCINATION: A POTENTIAL STRATEGY FOR PREVENTING MULTIPLE SCLEROSIS
PDF
lecture 2026 of Sjogren's syndrome l .pdf
PPTX
ECG_Course_Presentation د.محمد صقران ppt
PDF
Unveiling a 36 billion solar mass black hole at the centre of the Cosmic Hors...
PPTX
Vitamins & Minerals: Complete Guide to Functions, Food Sources, Deficiency Si...
PPTX
2. Earth - The Living Planet earth and life
PPTX
Introduction to Cardiovascular system_structure and functions-1
PPTX
Protein & Amino Acid Structures Levels of protein structure (primary, seconda...
PPTX
Comparative Structure of Integument in Vertebrates.pptx
PDF
SEHH2274 Organic Chemistry Notes 1 Structure and Bonding.pdf
PPTX
ANEMIA WITH LEUKOPENIA MDS 07_25.pptx htggtftgt fredrctvg
PDF
Cosmic Outliers: Low-spin Halos Explain the Abundance, Compactness, and Redsh...
PPTX
Introduction to Fisheries Biotechnology_Lesson 1.pptx
PDF
The scientific heritage No 166 (166) (2025)
PDF
Sciences of Europe No 170 (2025)
PPTX
cpcsea ppt.pptxssssssssssssssjjdjdndndddd
PPT
The World of Physical Science, • Labs: Safety Simulation, Measurement Practice
2. Earth - The Living Planet Module 2ELS
2Systematics of Living Organisms t-.pptx
BIOMOLECULES PPT........................
VARICELLA VACCINATION: A POTENTIAL STRATEGY FOR PREVENTING MULTIPLE SCLEROSIS
lecture 2026 of Sjogren's syndrome l .pdf
ECG_Course_Presentation د.محمد صقران ppt
Unveiling a 36 billion solar mass black hole at the centre of the Cosmic Hors...
Vitamins & Minerals: Complete Guide to Functions, Food Sources, Deficiency Si...
2. Earth - The Living Planet earth and life
Introduction to Cardiovascular system_structure and functions-1
Protein & Amino Acid Structures Levels of protein structure (primary, seconda...
Comparative Structure of Integument in Vertebrates.pptx
SEHH2274 Organic Chemistry Notes 1 Structure and Bonding.pdf
ANEMIA WITH LEUKOPENIA MDS 07_25.pptx htggtftgt fredrctvg
Cosmic Outliers: Low-spin Halos Explain the Abundance, Compactness, and Redsh...
Introduction to Fisheries Biotechnology_Lesson 1.pptx
The scientific heritage No 166 (166) (2025)
Sciences of Europe No 170 (2025)
cpcsea ppt.pptxssssssssssssssjjdjdndndddd
The World of Physical Science, • Labs: Safety Simulation, Measurement Practice

3 recursion

  • 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