Recursion - see Recursion

Slides:



Advertisements
Similar presentations
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. Chapter 13 – Recursion.
Advertisements

New Mexico Computer Science For All
Recursion (define tell-story (lambda () (print ‘’Once upon a time there was a mountain. ‘’) (print ‘’On the mountain, there was a temple. ‘’) (print ‘’In.
Recursion - see Recursion. RHS – SOC 2 Recursion We know that: –We can define classes –We can define methods on classes –Mehtods can call other methods.
Chapter 18 Recursion "To iterate is human, to recurse divine.", L. Peter Deutsch.
CHAPTER 13 Recursion. Recursive Solution A recursive solution  solves a problem by solving a smaller instance of the problem. Example  How do we go.
Recursion. Binary search example postponed to end of lecture.
Unit 181 Recursion Definition Recursive Methods Example 1 How does Recursion work? Example 2 Problems with Recursion Infinite Recursion Exercises.
Recursion. Objectives At the conclusion of this lesson, students should be able to Explain what recursion is Design and write functions that use recursion.
Recursion. 2 CMPS 12B, UC Santa Cruz Solving problems by recursion How can you solve a complex problem? Devise a complex solution Break the complex problem.
CHAPTER 17 RECURSION CHAPTER GOALS –To learn about the method of recursion –To understand the relationship between recursion and iteration –To analysis.
Chapter 15 Recursive Algorithms. 2 Recursion Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
CHAPTER 10 Recursion. 2 Recursive Thinking Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Unit 181 Recursion Definition Recursive Methods Constructing Recursion Benefits and Usage Infinite Recursion Recursion Removal Examples Exercises.
CS212: DATASTRUCTURES Lecture 3: Recursion 1. Lecture Contents 2  The Concept of Recursion  Why recursion?  Factorial – A case study  Content of a.
Introduction to Programming (in C++) Recursion Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC.
Recursion. Basic problem solving technique is to divide a problem into smaller subproblems These subproblems may also be divided into smaller subproblems.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 13 - Recursion.
Recursion A method is recursive if it makes a call to itself. A method is recursive if it makes a call to itself. For example: For example: public void.
Recursion l Powerful Tool l Useful in simplifying a problem (hides details of a problem) l The ability of a function to call itself l A recursive call.
Glen Martin - School for the Talented and Gifted - DISD Recursion Recursion Recursion Recursion Recursion Recursion.
15-1 Chapter-18: Recursive Methods –Introduction to Recursion –Solving Problems with Recursion –Examples of Recursive Methods.
Chapter 9: Recursion1 CHAPTER 9 RECURSION. Recursion  Concept of recursion  A recursive: Benefit and Cost  Comparison : Iterative and recursive functions.
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 19 : Recursion King Fahd University of Petroleum & Minerals College of Computer.
Principles of Programming - NI Simple Recursion Recursion is where a function calls itself. Concept of recursive function: A recursive function is.
CS212: DATASTRUCTURES Lecture 3: Recursion 1. Lecture Contents 2  The Concept of Recursion  Why recursion?  Factorial – A case study  Content of a.
Principles of Programming Chapter 11: Recursive Function  In this chapter, you will learn about  Recursion function 1 NI S1 2009/10.
CSE 501N Fall ‘09 12: Recursion and Recursive Algorithms 8 October 2009 Nick Leidenfrost.
Recursion. Math Review Given the following sequence: a 1 = 1 a n = 2*a n-1 OR a n+1 = 2*a n What are the values of the following? a 2 = a 3 = a 4 =
Data Structures R e c u r s i o n. Recursive Thinking Recursion is a problem-solving approach that can be used to generate simple solutions to certain.
Principles of Programming - NI Simple Recursion Recursion is where a function calls itself. Concept of recursive function: A recursive function is.
1 Chapter 8 Recursion. 2 Objectives  To know what is a recursive function and the benefits of using recursive functions (§8.1).  To determine the base.
Programming With Java ICS201 University Of Ha’il1 Chapter 11 Recursion.
Recursion. Objectives At the conclusion of this lesson, students should be able to Explain what recursion is Design and write functions that use recursion.
Chapter 6 (Lafore’s Book) Recursion Hwajung Lee.  Definition: An algorithmic technique. To solve a problem on an instance of size n, the instance is:
CSC 143 P 1 CSC 143 Recursion [Chapter 5]. CSC 143 P 2 Recursion  A recursive definition is one which is defined in terms of itself  Example:  Compound.
Welcome to Recursion! Say what?!? Recursion is… the process of solving large problems by simplifying them into smaller ones. similar to processing using.
Recursion You may have seen mathematical functions defined using recursion Factorial(x) = 1 if x
Recursion Powerful Tool
Sections 4.1 & 4.2 Recursive Definitions,
Recursion.
Chapter Topics Chapter 16 discusses the following main topics:
Recursion Version 1.0.
Recursion The programs discussed so far have been structured as functions that invoke one another in a disciplined manner For some problems it is useful.
Chapter 15 Recursion.
Recursion: The Mirrors
Lesson #6 Modular Programming and Functions.
Lesson #6 Modular Programming and Functions.
Chapter 15 Recursion.
Java 4/4/2017 Recursion.
Chapter 14: Recursion Starting Out with C++ Early Objects
Lesson #6 Modular Programming and Functions.
Recursion "To understand recursion, one must first understand recursion." -Stephen Hawking.
Recursion: The Mirrors
Data Structures and Algorithms
Recursion - see Recursion
Stacks & Recursion.
CS201: Data Structures and Discrete Mathematics I
Recursion Chapter 18.
Module 1-10: Recursion.
Chapter 17 Recursion.
Lesson #6 Modular Programming and Functions.
Java Programming: Chapter 9: Recursion Second Edition
Recursion: The Mirrors
CSC 143 Recursion.
Yan Shi CS/SE 2630 Lecture Notes
Dr. Sampath Jayarathna Cal Poly Pomona
Chapter 3 :Recursion © 2011 Pearson Addison-Wesley. All rights reserved.
Recursive Thinking.
Presentation transcript:

Recursion - see Recursion

Recursion We know that: But…can a method call itself…? We can define classes We can define methods on classes Mehtods can call other methods But…can a method call itself…? DCS – SWC

Recursion public void callMe() { System.out.println(”Hello”); } DCS – SWC

Recursion Previous method definition was legal, but hardly useful… Just calling the same method will result in an infinite loop BUT what if we Supply a parameter to the method Change the parameter in each call Stop calling ourselves for some specific value DCS – SWC

Recursion public void callMe(int calls) { if (calls > 0) System.out.println(”Hello”); int fewercalls = calls – 1; callMe(fewercalls); } DCS – SWC

Recursion Calling methods like this is often called recursion The previous example could easily be rewritten as a ”traditional” loop, and would even be more efficient However, quite a lot of problems can be solved very elegantly by recursion DCS – SWC

Recursion Example: the factorial function The factorial function F(n) is defined as: F(n) = n × (n-1) × (n-2) × … × 2 × 1 But you could also define F(n) as: F(n) = n × F(n-1) DCS – SWC

Recursion public void factorial(int n) { int result = 1; for (int val = 1; val <= n; val++) result = result * val; } return result DCS – SWC

Recursion public void factorial(int n) { if (n <= 1) return 1; else return (n * factorial(n-1)); } DCS – SWC

Thinking recursively Thinking in terms of recursion may seem quite confusing at first However, one should try not to think about how it works in detail  Think in terms of how a problem can be solved, by solving ”simpler” versions of the same problem DCS – SWC

Thinking recursively Solving a problem by recursion: Control step: Does the problem have a simple solution? Division step: Split the problem into a simpler problem, plus a residual Solution step: Solve the simpler problem Combination step: Combine the solution to the simpler problem with the residual, in order to solve the original problem DCS – SWC

Thinking recursively Solving the factorial function by recursion: Control step: Is n < 1? If so, the result is 1 Division step: Original problem: F(n) Simpler problem: F(n-1) Residual: n DCS – SWC

Thinking recursively Solving the factorial function by recursion: Solution step: Solve F(n-1) (go to top…) Combination step: Combine by multiplying F(n-1) with n DCS – SWC

Thinking recursively public void factorial(int n) { if (n <= 1) return 1; else return (n * factorial(n-1)); } Control Step Division Step Solution Step Combination Step DCS – SWC

Thinking recursively A slightly harder problem is string permutations: Given a string of text, find all possible permutations of the characters in the string A string of length n will have n! different permutations DCS – SWC

Thinking recursively The string ”cat” has 3! = 6 permutations: ”cat” ”cta” ”act” ”atc” ”tac” ”tca” DCS – SWC

Thinking recursively Solving string permutations by recursion: Control step: Does the string have length 1? If so, the result is the string itself DCS – SWC

Thinking recursively Solving string permutations by recursion: Division step: For each character c in the string: Let c be the residual Remove c from the original string. The resulting string is then the simpler problem DCS – SWC

Thinking recursively Solving string permutations by recursion: Solution step: For each string S generated during the division step: Find all permutations of S DCS – SWC

Thinking recursively Solving string permutations by recursion: Combination step: For each string S generated during the solution step: Combine S with the residual character c, by adding c to the front of S (permutation = c + S) Add the permutation to the result set DCS – SWC

Thinking recursively Solving string permutation by recursion is not trivial… …but try to write an algorithm for string permutation without using recursion! Trust that it works!  When there is a simple solution to simple inputs, and the problem can be solved by solving it for simpler inputs, it will work! DCS – SWC

Recursive helper methods It is sometimes easier to solve a more general problem by recursion Example: How to find a palindrome (a string which is equal to its own reverse) Possible interface to a Sentence class: Sentence(String theSentence) boolean isPalindrome() DCS – SWC

Recursive helper methods public boolean isPalindrome() { int len = text.length(); if (len < 2) return true; if ((text.substring(0,1).equals(text.substring(len-1,len))) Sentence newSen = new Sentence(text.substring(1,len-1)); return newSen.isPalindrome(); } else return false; DCS – SWC

Recursive helper methods Previous implementation works, but is somewhat inefficient We create a lot of Sentence objects Let us include a helper method, that checks if a substring is a palindrome: boolean isPalindrome(int start, int end) DCS – SWC

Recursive helper methods public boolean isPalindrome(int start, int end) { int len = end – start; if (len < 2) return true; if ((text.substring(start,start+1).equals( text.substring(end-1,end))) return isPalindrome(start+1,end-1); else return false; } DCS – SWC

Recursive helper methods Finally, implement original method by using the helper method: public boolean isPalindrome() { return isPalindrome(0, lext.length() – 1); } DCS – SWC

Efficiency of recursion Recursion is a very elegant principle, but not always the correct strategy… Can result in very inefficient algorithms, if care is not taken Common pitfall is to calculate identical values over and over DCS – SWC

Efficiency of recursion Example: Calculating Fibonacci numbers Fib(1) = 1 Fib(2) = 1 Fib(n) = Fib(n-1) + Fib(n-2) Looks like a recursive solution is a no-brainer… DCS – SWC

Efficiency of recursion public long fib(int n) { if (n <= 2) return 1; else return (fib(n-1) + fib(n-2)); } DCS – SWC

Efficiency of recursion Method does work, but is very inefficient We calculate same values over and over Fib(n) Fib(n-1) Fib(n-2) Fib(n-2) Fib(n-3) DCS – SWC

Recursion summary Recursion is a powerful and elegant tool for algorithm development Many algoritms are very easy to under-stand, if you understand recursion No silver bullet – recursive algorithms can be very slow Always consider (iterative) alternatives DCS – SWC