Download presentation
Presentation is loading. Please wait.
Published byΚύμα Μαρκόπουλος Modified over 6 years ago
1
Recursion Recursion is a math and programming tool
Technically, not necessary Advantages of recursion Some things are very easy to do with it, but difficult to do without it Frequently results in very short programs/algorithms Disadvantages of recursion Somewhat difficult to understand at first Often times less efficient than non-recursive counterparts Presents new opportunities for errors and misunderstanding Tempting to use, even when not necessary Recommendation – use with caution, and only if necessary => Read section 2.3
2
Recursive Mathematical Definitions
Factorial - Non-Recursive Definition N! = N * (N-1) * (N-2) * … * 2 * 1 *Note that a corresponding Java program is easy to write public static int fact(int n) :
3
{ Factorial - Recursive Definition 1 if N=1 Basis Case
N * (N-1)! if N>=2 Recursive Case Why is it called recursive? Why do we need a basis case? { N! =
4
Fibonacci - Non-Recursive Definition
… *Note that a corresponding Java program is easy to write…or is it? public static int fib(int n) :
5
{ Fibonacci - Recursive Definition 0 if N=1 Basis Case
fib(N-1) + fib(N-2) if N>=3 Recursive Case { fib(N) =
6
Recursive Java Programs
Printing N Blank Lines – Non-Recursive public static void NBlankLines(int n) { for (int i=1; i<=n; i++) System.out.println(); }
7
Printing N Blank Lines – Recursive
// NBlankLines outputs n blank lines, for n>=0 public static void NBlankLines(int n) { if (n <= 0) Basis Case return; else { System.out.println(); NBlankLines(n-1); Recursive Case }
8
Another Version // NBlankLines outputs n blank lines, for n>=0
public static void NBlankLines(int n) { if (n > 0) { System.out.println(); NBlankLines(n-1); }
9
public static void main(String[] pars) {
: NBlankLines(3); } public static void NBlankLines(int n) { n=3 if (n > 0) { System.out.println(); NBlankLines(n-1); public static void NBlankLines(int n) { n=2 public static void NBlankLines(int n) { n=1 public static void NBlankLines(int n) { n=0
10
A Similar Method: public static void TwoNBlankLines(int n) {
if (n > 0) { System.out.println(); TwoNBlankLines(n-1); }
11
public static void main(String[] pars) {
: TwoNBlankLines(2); } public static void TwoNBlankLines(int n) { n=2 if (n > 0) { System.out.println(); TwoNBlankLines(n-1); public static void TwoNBlankLines(int n) { n=1 public static void TwoNBlankLines(int n) { n=0
12
Are the Following Methods the Same or Different?
public static void TwoNBlankLines(int n) { if (n > 0) { System.out.println(); TwoNBlankLines(n-1); }
13
{ Recursive Factorial Definition 1 if N=1 Basis Case
N * (N-1)! if N>=2 Recursive Case Recursive Factorial Program public static int fact (int n) { if (n==1) return 1; Basis Case else { int x; Recursive Case x = fact (n-1); return x*n; } { N! =
14
Another Version public static int fact (int n) { if (n==1)
return 1; Basis Case else return n*fact (n-1); Recursive Case }
15
{ Recursive Fibonacci Definition 0 if N=1 Basis Case
fib(N-1) + fib(N-2) if N>=3 Recursive Case Recursive Fibonacci Program public static int fib (int n) { if (n==1) return 0; Basis Case else if (n==2) return 1; Basis Case else { int x,y; Recursive Case x = fib (n-1); y = fib (n-2); return x+y; } { fib(N) =
16
Another Version public static int fib (int n) { if (n==1) return 0; else if (n==2) return 1; else return fib(n-1) + fib(n-2); }
17
Recursion & The Run-Time Stack
How does recursion related to stack frames and the run time stack? Note that stack frames are sometimes called allocation records or activation records Why might a recursive program be less efficient than non-recursive counterpart? Why is the recursive fibonnaci function especially inefficient?
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.