# Exercise 1 solution

## Exercise

Consider method `mystery`.

``````public static void mystery(int x)
{
if(x >= 0)
{
mystery(x - 1);
System.out.println(x);
}
}
``````

Which of the following describes the sequence of integers output? (Ignore line breaks.)

(A) `x, x - 1, x - 2 ... 1`
(B) `x, x - 1, x - 2 ... 1, 0`
(C) `x - 1, x - 2 ... 1, 0`
(D) `0, 1 ... x - 1, x`
(E) `1, 2 ... x - 1, x`

## Solution

(D) `0, 1 ... x - 1, x`

## Explanation

Infinite recursion is not an answer choice, so it does not need to be considered.

The `print` statement is after the recursive call. It prints the original value of `x`. Whatever the recursive call does, the very last value that will be printed is the original value of `x`. This eliminates all of the answer choices except (D) and (E).

Answer choice (D) includes `0`. Answer choice (E) does not. When the method is called with `0`, the condition `x >= 0` evaluates to `true`. The method prints `0`. The answer is (D).

The base case is `x < 0`, the opposite of the condition in the method. Base cases must be resolved without a recursive call. It is common for base cases to be written as conditional statements at the top of a recursive method; however, this is not required.