//precondition: x >=0
public static void mystery (int x)
{
System.out.print(x % 10);
if ((x / 10) != 0)
{
mystery(x / 10);
}
System.out.print(x % 10);
}
1441
The first call to mystery with the integer 1234 will print 1234 % 10. The β%β means remainder. The remainder of 1234 divided by 10 is 4 so the first thing printed must be 4.
43211234
This has a recursive call which means that the method calls itself when (x / 10) is greater than or equal to zero. Each time the method is called it prints the remainder of the passed value divided by 10 and then calls the method again with the result of the integer division of the passed number by 10 (which throws away the decimal part). After the recursion stops by (x / 10) == 0 the method will print the remainder of the passed value divided by 10 again.
3443
The first call to mystery with the integer 1234 will print 1234 % 10. The β%β means remainder. The remainder of 1234 divided by 10 is 4 so the first thing printed must be 4.
12344321
The first call to mystery with the integer 1234 will print 1234 % 10. The β%β means remainder. The remainder of 1234 divided by 10 is 4 so the first thing printed must be 4.
Many digits are printed due to infinite recursion.
When the recursive call to mystery(1) occurs (the 4th call to mystery), the division of x /10 equals .01--this becomes 0 because this is integer division and the remainder is thrown away. Therefore the current call will be completed and all of the previous calls to mystery will be completed.
public static int mystery(int n)
{
if (n == 0)
{
return 1;
}
else
{
return 3 * mystery (n - 1);
}
}
243
For the call mystery(5), n != 0 so the else statement is executed. This results in the next recursive call of mystery(4). This will continue until the call mystery(0) is executed. At this point, the value 1 will be returned. Then each call of mystery can return with the 3 * the result of the recursive call. So this method will compute 3 to the given power.
0
This can never be 0 because the stopping condition returns 1 when you call mystery(0)
public static int product(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * product(n - 2);
}
}
1
The value 1 will only be returned when the initial call to product is less than or equal to 1.
10
If you assume the purpose of the method is to compute n * 2, this is correct, but the product method does not do this. Be sure to trace the code to see what happens.
25
If you assume the purpose of the method is to compute n * n this is correct, but the product method does not do this. Be sure to trace the code to see what happens.
3125
If you assume the purpose of the method is to compute n ^ n, this would be correct. But product does not do this. Be sure to trace the code to see what happens.
15
The result from product(5) is 5 * product(3) which is 3 * product(1) which is 1 so the answer is 1 * 3 * 5 = 15.
public static int redo(int i, int j)
{
if (i == 0)
{
return 0;
}
else
{
return redo(i / j, j) + 1;
}
}
5
The first time the method is called, i is not equal to 0, so the method makes a recursive call to itself, with the value of 82/3 which equals 27 due to integer division. This is still not equal to 0, so the method calls itself with the first parameter equal to 9, then 3, then 1. Finally, the method is called with the first parameter of 1/3 which equals 0 due to integer division which throws away any decimal part. Each method call adds 1 to the result, except for the final call when i is equal to 0.
4
Each time the method is called when i is not equal to 0, the return value is incremented. This happens 5 times, with i equal to 81, 27, 9, 3, and 1.
6
The return value is not incremented the last time the method is called, when i is equal to 0.
7
The method only executes 6 times, with the return value incremented each time i is not equal to zero
The method never returns due to infinite recursion.
Infinite recursion would happen if the method never reached its base case where i is equal to 0. This would be true if the division could result in a constantly shrinking fraction, but integer division truncates the fractional portion of the division.