Document Sample

Recursion Dennis Burford dburford@cs.uct.ac.za Exercise • Number of people in a row? • Start with person on left: • How many people to the right – If no-one to the right, say “one” – Else ask person to the right, add one to this, and say the answer Work this out…. Calculate f(3), where: f(x) = 2 * f(x-1) and f(0) = 1 and x >=0 f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* f(2) f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* f(2) 2* f(1) f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* f(2) 2* f(1) 2* f(0) f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* f(2) 2* f(1) 2* f(0) 1 f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* f(2) 2* f(1) 2* 1 f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* f(2) 2* 2 f (x) = 2 * f (x-1) f(3) f (0) = 1 x >= 0 2* 4 f (x) = 2 * f (x-1) 8 f (0) = 1 x >= 0 f (x) = 2 * f (x-1) f (0) = 1 x >= 0 f (3) = 8 Write f (x) in Java code f (x) = 2 * f (x-1) f (0) = 1 x >= 0 f (x) in Java code f (x) = 2 * f (x-1) f (0) = 1 public int f( int x ) x >= 0 { if ( x == 0 ) // Base case return 1; else return 2 * f (x-1); // Recursion } Recursion • f (x) = 2 * f (x-1) is recursive definition of a function. • Function defined in terms of itself. • Solved by repeatedly applying set of rules. Recursion in Java • In Java – Recursion is when a method calls itself. – Must be a case when it does not call itself (called the stopping condition or base case) • Recursion is an alternative to looping. • As with looping, recursion can cause your program to loop forever. What’s wrong? f (x) = 2 * f (x-1) f (0) = 1 public int f( int x ) x >= 0 { if ( x == 0 ) // Base case return 1; else return 2 * f (x-1); // Recursion } What about f (-1)? f (x) = 2 * f (x-1) f (0) = 1 public int f( int x ) x >= 0 { if ( x <= 0 ) // Base case return 1; else return 2 * f (x-1); // Recursion } Efficiency of Recursion • Any recursive function can be converted to an equivalent iterative method. • Although recursion is elegant, it can be inefficient, because there are more calls to methods. • Iterative methods are more efficient and faster. f(x) = 2 * f(x-1) f(0) = 1 f(0) = 1 x >= 0 f(1) = 2 f(2) = 4 f(3) = 8 f(x) = 2 x Another way to write f(x) in Java public int f( int x ) { int total = 1; for (int i=0; i<x; i++) // Iterative total = total * 2; return total; } Rules of Recursion 1. Base cases: always have base case, which is solved without recursion 2. Making progress: for recursive cases, call must always make progress towards base case 3. Design Rule: assume all recursive calls work. Another Example • Factorials – 3! = 3*2*1 = 6 – 4! = 4*3*2*1 = 24 – n! = n*(n-1)*….*3*2*1, n >= 0 • Base case – 0! = 1 Factorials: Recursive public static int factorialR( int n ) { if (n <= 1 ) return 1; else return (n * factorialR(n-1)); } Factorials: Iterative public static int factorialI( int n ) { int ans = n; for (int i = n-1; i>0; i--) ans *= i; return ans; } Example: Reversing a String • Reverse() takes String and prints reverse • Reverse(“dennis”) prints out “sinned” • Base case? • Progress? Another Example: Binary Search • Sorted array of numbers in ascending order: 3, 5, 6, 7, 15, 19, 24, 27, 35, 40, 68, 70, 72, 75, 81, 90 • Find 81(use recursive function). To Iterate is Human, To Recurse Divine

DOCUMENT INFO

Shared By:

Categories:

Tags:
base case, Tail recursion, Recursion Theory, infinite recursion, recursive function, recursive definition, recursion theorem, recursive functions, natural numbers, natural number

Stats:

views: | 5 |

posted: | 4/12/2011 |

language: | English |

pages: | 29 |

OTHER DOCS BY gyvwpsjkko

How are you planning on using Docstoc?
BUSINESS
PERSONAL

By registering with docstoc.com you agree to our
privacy policy and
terms of service, and to receive content and offer notifications.

Docstoc is the premier online destination to start and grow small businesses. It hosts the best quality and widest selection of professional documents (over 20 million) and resources including expert videos, articles and productivity tools to make every small business better.

Search or Browse for any specific document or resource you need for your business. Or explore our curated resources for Starting a Business, Growing a Business or for Professional Development.

Feel free to Contact Us with any questions you might have.