Когда вы имеете дело с рекурсией, важно, чтобы написать АЛГОРИТМ сначала на английском языке (или на родном языке :)).
Для решения этой задачи, необходимо учитывать следующее:
- У меня есть номер
n
. Возьмем последнюю цифру и вычтем эту цифру до 9.
- Сделайте это снова для остальной части цифр, то есть
n/10
. В результате мы должны снова сделать число: поэтому мы умножаем результат на 10 и добавляем ранее вычисленную цифру. Другими словами, complement(n/10)
возвращает дополнение к числу n
без последней цифры, поэтому нам нужно добавить дополнение к последней цифре.
- Когда число меньше 10, нам больше нечего делать, и мы можем просто вернуть
9 - n
(это базовый случай, число составляет только одну цифру).
В коде это реализовано как:
public static int complement(int n) {
if (n < 10) {
return 9 - n;
}
int x = n % 10;
x = 9 - x;
return 10 * complement(n/10) + x;
}
, а затем:
System.out.println(complement(1234)); // prints 8765
Это можно записать немного короче с:
public static int complement(int n) {
if (n < 10) {
return 9 - n;
}
return 10 * complement(n/10) + 9 - n % 10;
}
Я не убедитесь, что вы удаляете соответствующие части своего вопроса. Они важны, поскольку они показывают текущий код, и эти усилия были сделаны. Пожалуйста, не отрицайте свою должность (даже 1-летнюю должность), это было в прошлом для этого вопроса. – Tunaki