1 / 28

A Different Solution

A Different Solution. alternatively we can use the following algorithm: if n == 0 done , otherwise print the string once print the string (n – 1) more times. Recursion. a method that calls itself is called a recursive method

tbugg
Download Presentation

A Different Solution

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A Different Solution • alternatively we can use the following algorithm: • if n == 0 done, otherwise • print the string once • print the string (n – 1) more times

  2. Recursion • a method that calls itself is called a recursive method • a recursive method solves a problem by repeatedly reducing the problem so that a base case can be reached printIt("*", 5) *printIt("*", 4) **printIt("*", 3) ***printIt("*", 2) ****printIt("*", 1) *****printIt("*", 0) base case ***** Notice that the number of times the string is printed decreases after each recursive call to printIt Notice that the base case is eventually reached.

  3. Infinite Recursion • if the base case(s) is missing, or never reached, a recursive method will run forever (or until the computer runs out of resources) printIt("*", 1) * printIt("*", 0) ** printIt("*", -1) *** printIt("*", -2) ...........

  4. Rabbits Month 0: 1 pair 0 additional pairs Month 1: first pair makes another pair 1 additional pair Month 2: each pair makes another pair; oldest pair dies 1 additional pair 2 additional pairs Month 3: each pair makes another pair; oldest pair dies

  5. Fibonacci Numbers • the sequence of additional pairs • 0, 1, 1, 2, 3, 5, 8, 13, ... are called Fibonacci numbers • base cases • F(0) = 0 • F(1) = 1 • recursive definition • F(n) = F(n – 1) + F(n – 2)

  6. Recursive Methods & Return Values • a recursive method can return a value • example: compute the nth Fibonacci number

  7. Recursive Methods & Return Values • example: write a recursive method countZeros that counts the number of zeros in an integer number n • 10305060700002L has 8 zeros • algorithm: if the last digit in n is a zero return 1 + countZeros(n / 10) else return countZeros(n / 10)

  8. don't forget to establish the base case(s) • when should the recursion stop? when you reach a single digit (not zero digits; you never reach zero digits!) • base case #1 : n == 0 • return 1 • base case #2 : n != 0 && n < 10 • return 0

  9. countZeros Call Stack callZeros( 800410L ) last in first out callZeros( 8L ) 0 callZeros( 80L ) 1 + 0 callZeros( 800L ) 1 + 1 + 0 callZeros( 8004L ) 0 + 1 + 1 + 0 callZeros( 80041L ) 0 + 0 + 1 + 1 + 0 callZeros( 800410L ) 1 + 0 + 0 + 1 + 1 + 0 3

  10. Fibonacci Call Tree F(5) F(4) F(3) F(2) F(1) 1 F(3) F(2) F(2) F(1) 1 F(1) 1 F(0) 0 F(1) 1 F(0) 0 F(1) 1 F(0) 0

  11. Compute Powers of 10 • write a recursive method that computes 10n for any integer value n • recall: • 100 = 1 • 10n = 10 * 10n-1 • 10-n = 1 / 10n

  12. Proving Correctness and Termination • to show that a recursive method accomplishes its goal you must prove: • that the base case(s) and the recursive calls are correct • that the method terminates

  13. Proving Correctness • to prove correctness: • prove that each base case is correct • assume that the recursive invocation is correct and then prove that each recursive case is correct

  14. Correctness of printIt • (prove the base case) If n == 0 nothing is printed; thus the base case is correct. • Assume that printIt(s, n-1) prints the string s(n – 1) times. Then the recursive case prints the string s(n – 1)+1 = n times; thus the recursive case is correct.

  15. Proving Termination • to prove that a recursive method terminates: • define the size of a method invocation; the size must be a non-negative integer number • prove that each recursive invocation has a smaller size than the original invocation

  16. Termination of printIt • printIt(s, n) prints n copies of the string s; define the size of printIt(s, n) to be n • The size of the recursive invocationprintIt(s, n-1) is n-1 (by definition) which is smaller than the original size n.

  17. countZeros

  18. Correctness of countZeros • (base cases) If the number has only one digit then the method returns 1 if the digit is zero and 0 if the digit is not zero; therefore, the base case is correct. • (recursive cases) Assume that countZeros(n/10L) is correct (it returns the number of zeros in the first (d – 1) digits of n). If the last digit in the number is zero, then the recursive case returns 1 + the number of zeros in the first (d – 1) digits of n, otherwise it returns the number of zeros in the first (d – 1) digits of n; therefore, the recursive cases are correct.

  19. Termination of countZeros • Let the size of countZeros(n) be d the number of digits in the number n. • The size of the recursive invocation countZeros(n/10L) is d-1, which is smaller than the size of the original invocation.

  20. Decrease and Conquer • a common strategy for solving computational problems • solves a problem by taking the original problem and converting it to one smaller version of the same problem • note the similarity to recursion • decrease and conquer, and the closely related divide and conquer method, are widely used in computer science • allow you to solve certain complex problems easily • help to discover efficient algorithms

  21. Root Finding • suppose you have a mathematical function f(x) and you want to find x0 such that f(x0) = 0 • why would you want to do this? • many problems in computer science, science, and engineering reduce to optimization problems • find the shape of an automobile that minimizes aerodynamic drag • find an image that is similar to another image (minimize the difference between the images) • find the sales price of an item that maximizes profit • if you can write the optimization criteria as a function g(x) then its derivative f(x) = dg/dx = 0 at the minimum or maximum of g (as long as g has certain properties)

  22. Bisection Method • suppose you can evaluate f(x) at two points x = a and x = b such that • f(a) > 0 • f(b) < 0 f(x) 'plus' f(a) x f(b) 'minus'

  23. Bisection Method • evaluate f(c) where c is halfway between a and b • if f(c) is close enough to zero done f(x) 'plus' f(a) x f(b) f(c) 'minus'

  24. Bisection Method • otherwise c becomes the new end point (in this case, 'minus') and recursively search the range 'plus' – 'minus' f(x) 'plus' f(a) f(c) x f(b) 'minus'

  25. Divide and Conquer • bisection works by recursively finding which half of the range 'plus' – 'minus' the root lies in • each recursive call solves the same problem (tries to find the root of the function by guessing at the midpoint of the range) • each recursive call solves one smaller problem because half of the range is discarded • bisection method is decrease and conquer • divide and conquer algorithms typically recursively divide a problem into several smaller sub-problems until the sub-problems are small enough that they can be solved directly

More Related