Homework: Recursion I
For each of the following problems, you need to find a recursive
solution. For problems involving NaturalNumber, use only the kernel
methods. Do not use "tricks" like converting a NaturalNumber into a
String and then solving the problem on the String.
-
Implement the static method declared as follows:
/** * Returns the number of digits of {@code n}. * * @param n * {@code NaturalNumber} whose digits to count * @return the number of digits of {@code n} * @ensures numberOfDigits = [number of digits of n] */ private static int numberOfDigits(NaturalNumber n) {...} -
Implement the static method declared as follows:
/** * Returns the sum of the digits of {@code n}. * * @param n * {@code NaturalNumber} whose digits to add * @return the sum of the digits of {@code n} * @ensures sumOfDigits = [sum of the digits of n] */ private static int sumOfDigits(NaturalNumber n) {...} -
In addition to the kernel methods, for this question (only!) you are allowed to use the
NaturalNumbermethodadd. Implement the static method declared as follows:/** * Returns the sum of the digits of {@code n}. * * @param n * {@code NaturalNumber} whose digits to add * @return the sum of the digits of {@code n} * @ensures sumOfDigits = [sum of the digits of n] */ private static NaturalNumber sumOfDigits(NaturalNumber n) {...} -
Implement the static method declared as follows:
/** * Divides {@code n} by 2. * * @param n * {@code NaturalNumber} to be divided * @updates n * @ensures 2 * n <= #n < 2 * (n + 1) */ private static void divideBy2(NaturalNumber n) {...} -
Implement the static method declared as follows:
/** * Checks whether a {@code String} is a palindrome. * * @param s * {@code String} to be checked * @return true if {@code s} is a palindrome, false otherwise * @ensures isPalindrome = (s = rev(s)) */ private static boolean isPalindrome(String s) {...}