1 / 30

ITI 1120 Lab #8

ITI 1120 Lab #8. Contributors: Diana Inkpen, Daniel Amyot, Sylvia Boyd, Amy Felty, Romelia Plesa, Alan Williams. Lab 8 Agenda. Recursion Examples of recursive algorithms Recursive Java methods. Recursion Practice problem #1.

mckile
Télécharger la présentation

ITI 1120 Lab #8

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. ITI 1120Lab #8 Contributors: Diana Inkpen, Daniel Amyot, Sylvia Boyd, Amy Felty, Romelia Plesa, Alan Williams

  2. Lab 8 Agenda • Recursion • Examples of recursive algorithms • Recursive Java methods

  3. Recursion Practice problem #1 • Write a recursive algorithm for counting the number of digits in a non-negative integer, N

  4. Practice problem #1- solution GIVENS: N INTERMEDIATE: RestOfDigits RESULT: Count (the number of digits in N) HEADER: Count  NumberOfDigits(N)

  5. Practice problem #1 – solution – cont’d BODY: RestOfDigits= N / 10 RestOfDigits= 0 ? false true Count  NumberOfDigits(RestOfDigits)Count Count + 1 Count  1

  6. Trace for N = 254

  7. Trace, page 2 Count  NumberOfDigits(RestOfDigits) Count  NumberOfDigits(N) 25

  8. Trace , page 3 Count  NumberOfDigits(RestOfDigits) Count  NumberOfDigits(N) 1 2

  9. Trace , page 2 Count  NumberOfDigits(RestOfDigits) Count  NumberOfDigits(N) 2 25

  10. Trace, page 1

  11. Implement this algorithm in Java

  12. Let’s see how the code runs • In your recursive method: • Put System.out.println() statements at the following locations (print the actual value of n): • Immediately after local variable declarations 1: Entering method with n = 254 • Just before recursive method call: 2: Recursive call from n = 254 • Just after recursive method call: 3: Returned from recursion with n = 254 • Just before return statement 4: Returning from method with n = 254, count = 3 • In the base case 5: Base case with n = 2

  13. Practice problem #2 • Write a recursive algorithm to test if all the characters in positions 0...N-1 of an array, A, of characters are digits.

  14. Practice problem #2 - solution GIVENS: A (an array of characters) N (test up to this position in array) RESULT: AllDigits (Boolean, true if all characters in position 0..N are digits) HEADER: AllDigits  CheckDigits(A,N)

  15. Practice problem #2 – solution – cont’d BODY: A[N-1] ≥ ′0′ AND A[N-1] ′9′ ? false true false true N = 1 ? AllDigits  False AllDigits  CheckDigits(A, N-1) AllDigits  True

  16. Practice problem #2 –– cont’d • Translate the algorithm into a Java method

  17. Practice problem #2 – solution – cont’d

  18. Practice problem #3 • Write a recursive algorithm to test if a given array is in sorted order.

  19. Practice problem #3 - solution GIVENS: A (an array of integers) N (the size of the array) RESULT: Sorted (Boolean: true if the array is sorted) HEADER: Sorted  CheckSorted(A,N)

  20. Practice problem #3 – solution – cont’d BODY: false true N = 1 ? false A[N–2] < A[N–1]? true Sorted  True Sorted  False Sorted  CheckSorted(A, N-1)

  21. Practice problem #4 • Write a recursive algorithm to create an array containing the values 0 to N-1 • Hint: • Sometimes you need 2 algorithms: • The first is a “starter” algorithm that does some setup actions, and then starts off the recursion by calling the second algorithm • The second is a recursive algorithm that does most of the work.

  22. Practice problem #4 - solution GIVENS: N (the size of the array) RESULT: A (the array) HEADER: A  CreateArray(N) BODY: A  MakeNewArray(N) FillArray(A, N – 1) FillArrayis the recursive algorithm

  23. Practice problem #4 – solution – cont’d Algorithm FillArray GIVENS: A (an array) N (the largest position in the array to fill) MODIFIEDS: A RESULT: (none) HEADER: FillArray(A, N)

  24. Practice problem #4 – solution – cont’d BODY: false N = 0 ? true FillArray(A, N-1)  A[N]  N

  25. Practice Problem #5: Euclid’s algorithm • The greatest common divisor (GCD) of two positive integers is the largest integer that divides both values with remainders of 0. • Euclid’s algorithm for finding the greatest common divisor is as follows: gcd(a, b) is … • b if a ≥ b and a mod b is 0 • gcd(b, a) if a < b • gcd(b, a mod b) otherwise • Write a recursive algorithm that takes two integers A and B and returns their greatest common divisor. You may assume that Aand Bare integers greater than or equal to 1.

  26. What is the base case? FindGCD(A, B) is … • B if A ≥ B and A MOD B is 0 • FindGCD(B, A) if A < B • FindGCD(B, A MOD B) otherwise • Question: will this algorithm always reach the base case? • Note that A MOD B is at most B – 1.

  27. Euclid’s Algorithm GIVENS: A, B(Two integers > 0) RESULT: GCD (greatest common divisor of A and B) HEADER: GCD  FindGCD(A, B)

  28. Euclid’s Algorithm BODY: false true A ≥ B ? false true GCD FindGCD(B, A) A MOD B = 0 ? GCD  B GCD FindGCD(B, A MOD B)

  29. Euclid’s Algorithm in Java

  30. Test this method • Create a class Euclid that includes the method findGCD, and also a main( ) method that will ask the user to enter two values and print their GCD. • Try the following: a = 1234, b = 4321 a = 8192, b = 192

More Related