Download presentation
Presentation is loading. Please wait.
Published byClarence Floyd Modified over 8 years ago
1
ITI 1120 Lab #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 ? true Count 1 false Count NumberOfDigits(RestOfDigits) Count Count + 1
6
Trace for N = 254 Line NRestOfDigitsCount Initial values 254?? (1) RestOfDigits = N / 10 25 (2) RestOfDigits = 0 ? false (3) CALL Count NumberOfDigits(RestOfDigits) (4) Count Count + 1
7
Trace, page 2 Line NRestOfDigitsCount Initial values 25?? (1) RestOfDigits = N / 10 2 (2) RestOfDigits = 0 ? false (3) CALL Count NumberOfDigits(RestOfDigits) (4) Count Count + 1 Count NumberOfDigits(RestOfDigits) Count NumberOfDigits(N) 25
8
Trace, page 3 Line NRestOfDigitsCount Initial values 2?? (1) RestOfDigits = N / 10 0 (2) RestOfDigits = 0 ? true (5) Count 1 1 Count NumberOfDigits(RestOfDigits) Count NumberOfDigits(N) 21
9
Trace, page 2 Line NRestOfDigitsCount Initial values 25?? (1) RestOfDigits = N / 10 2 (2) RestOfDigits = 0 ? false (3) CALL Count NumberOfDigits(RestOfDigits) 1 (4) Count Count + 1 2 Count NumberOfDigits(RestOfDigits) Count NumberOfDigits(N) 252
10
Trace, page 1 Line NRestOfDigitsCount Initial values 254?? (1) RestOfDigits = N / 10 25 (2) RestOfDigits = 0 ? false (3) CALL Count NumberOfDigits(RestOfDigits) 2 (4) Count Count + 1 3
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′ ? true N = 1 ? true AllDigits True false AllDigits CheckDigits(A, N-1) false AllDigits False
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: A[N–2] < A[N–1] ? true N = 1 ? true Sorted True false Sorted CheckSorted(A, N-1) false Sorted False
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) FillArray is 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: N = 0 ? true false 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 … bif 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 A and B are integers greater than or equal to 1.
26
What is the base case? FindGCD(A, B) is … Bif 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: A MOD B = 0 ? true GCD B false GCD FindGCD(B, A MOD B) A ≥ B ? GCD FindGCD(B, A) true false
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.