Chapter 18 Check Point Questions
Section 18.2
                    
                    
              ▼18.2.1
            What is a recursive method? What is an infinite recursion?
                
                
              ▼18.2.2
            How many times is the factorial method in Listing 18.1 invoked for factorial(6)?
                
                
              ▼18.2.3
             Show the output of the following programs and identify base cases and recursive calls.
                 
               
                (a) public class Test { public static void main(String[] args) { System.out.println( "Sum is " + xMethod(5)); } public static int xMethod(int n) { if (n == 1) return 1; else return n + xMethod(n - 1); } } (b) public class Test { public static void main(String[] args) { xMethod(1234567); } public static void xMethod(int n) { if (n > 0) { System.out.print(n % 10); xMethod(n / 10); } } }
              ▼18.2.4
            Write a recursive mathematical definition for computing 2 n  for a positive integer n.
                
                
              ▼18.2.5
            Write a recursive mathematical definition for computing x n  for a positive integer n and a real number x.
                
                
              ▼18.2.6
            Write a recursive mathematical definition for computing 1 + 2 + 3 + ... + n for a positive integer n.
                
                
Section 18.3
                    
                    
              ▼18.3.1
            Show the output of the following two programs:
                 
               
                (a) public class Test { public static void main(String[] args) { xMethod(5); } public static void xMethod(int n) { if (n > 0) { System.out.print(n + " "); xMethod(n - 1); } } } (b) public class Test { public static void main(String[] args) { xMethod(5); } public static void xMethod(int n) { if (n > 0) { xMethod(n - 1); System.out.print(n + " "); } } }
              ▼18.3.2
            What is wrong in the following method?
                 
               
                (a) public class Test { public static void main(String[] args) { xMethod(1234567); } public static void xMethod(double n) { if (n != 0) { System.out.print(n); xMethod(n / 10); } } } (b) public class Test { public static void main(String[] args) { Test test = new Test(); System.out.println(test.toString()); } public Test() { Test test = new Test(); } }
              ▼18.3.3
            How many times is the fib method in Listing 18.2 invoked for fib(6)?
                
                
Section 18.4
                    
                    
              ▼18.4.1
            Describe the characteristics of recursive methods.
                
                
              ▼18.4.2
            For the isPalindrome method in Listing 18.3, what are the base cases? How many times is this method called when invoking isPalindrome("abdxcxdba")?
                
                
              ▼18.4.3
            Show the call stack for isPalindrome("abcba") using the method defined in Listing 18.3.
                
                
Section 18.5
                    
                    
              ▼18.5.1
            Show the call stack for isPalindrome("abcba") using the method defined in Listing 18.4.
                
                
              ▼18.5.2
             Show the call stack for selectionSort(new double[]{2, 3, 5, 1}) using the method defined in Listing 18.5.
                
                
              ▼18.5.3
            What is a recursive helper method?
                
                
Section 18.6
                    
                    
              ▼18.6.1
            What is the base case for the getSize method?
                
                
              ▼18.6.2
            How does the program get all files and directories under a given directory?
                
                
              ▼18.6.3
            How many times will the getSize method be invoked for a directory if the directory has three subdirectories and each subdirectory has four files?
                
                
              ▼18.6.4
            Will the program work if the directory is empty (i.e., it does not contain any files)? 
                
                
              ▼18.6.5
            Will the program work if line 20 is replaced by the following code?
                 
               
                for (int i = 0; i < files.length; i++)
              ▼18.6.6
            Will the program work if lines 20-21 is replaced by the following code?
                 
               
                for (File file: files) size += getSize(file); // Recursive call
Section 18.7
                    
                    
              ▼18.7.1
            How many times is the moveDisks method in Listing 18.8 invoked for moveDisks(5, 'A', 'B', 'C')?
                
                
Section 18.8
                    
                    
              ▼18.8.1
            How do you obtain the midpoint between two points?
                
                
              ▼18.8.2
            What is the base case for the displayTriangles method?
                
                
              ▼18.8.3
            How many times is the displayTriangles method invoked for a Sierpinski triangle of order 0, order 1, order 2, and order n? 
                
                
              ▼18.8.4
            What happens if you enter a negative order? How do you fix this problem in the code? 
                
                
              ▼18.8.5
            Instead of drawing a triangle using a polygon, rewrite the code to draw a triangle by drawing three lines to connect the points in lines 71-77.
                
                
Section 18.9
                    
                    
              ▼18.9.1
            Which of the following statements are true? 
a. Any recursive method can be converted into a nonrecursive method.
b. Recursive methods take more time and memory to execute than nonrecursive methods.
c. Recursive methods are always simpler than nonrecursive methods.
d. There is always a selection statement in a recursive method to check whether a base case is reached.
                
                
a. Any recursive method can be converted into a nonrecursive method.
b. Recursive methods take more time and memory to execute than nonrecursive methods.
c. Recursive methods are always simpler than nonrecursive methods.
d. There is always a selection statement in a recursive method to check whether a base case is reached.
              ▼18.9.2
            What is a cause for a stack-overflow exception?
                
                
Section 18.10
                    
                    
              ▼18.10.1
            Identify tail-recursive methods in this chapter.
                
                
              ▼18.10.2
            Rewrite the fib method in Listing 18.2 using tail recursion.