Introduction to CPP and Other Languages Designed
Introduction to CPP and Other Languages Designed
Recursion
1. A function, which calls itself either directly or
indirectly through another function.
8
Tracing a Recursive Method
Note:
Note:the
therecursive
recursive
method
methodwillwilluse
usemore
more
memory
memorythan thananan
iterative
iterativemethod
methoddue due
to
tothe
thestack
stackofof
activation
activationrecords
records
11
Recursive Methods That Return
a Value
f act or i al ( ) n=0 r et ur n 1;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=0 r et ur n 1;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=1 r et ur n n * 1;
f act or i al ( ) n=0 r et ur n 1;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=1 r et ur n 1 * 1;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=2 r et ur n n * 1
f act or i al ( ) n=1 r et ur n 1 * 1;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=2 r et ur n 2 * 1
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=3 r et ur n n * 2;
f act or i al ( ) n=2 r et ur n 2 * 1;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = f act or i al ( n) ;
f act or i al ( ) n=3 r et ur n 3 * 2;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = 6;
f act or i al ( ) n=3 r et ur n 3 * 2;
Recursive invocation
A new activation record is created for every
method invocation
Including recursive invocations
mai n( ) i nt nf act or i al = 6;
Infinite recursion
A common programming error when using
recursion is to not stop making recursive
calls.
The program will continue to recurse until
it runs out of memory.
Be sure that your recursive calls are made with
simpler or smaller subproblems, and that your
algorithm has a base case that terminates the
recursion.
Fibonacci Series Code
public static int fib (int n) {
if (n <= 2)
return 1;
else
return fib(n-1) + fib(n-2);
}
33
Efficiency of Recursion: Inefficient
Fibonacci
34
Efficient Fibonacci
Strategy: keep track of:
Current Fibonacci number
Previous Fibonacci number
35
Efficient Fibonacci: Code
public static int fibStart (int n) {
return fibo(1, 1, n);
}
37
Recursion Advantages
Expressive Power
Recursive code is typically much shorter than
iterative.