2015-10-14 3 views
2

Я пытаюсь думать о том, как использовать рекурсию, чтобы найти дополнение к числу. Например, каждая цифра x номера должна быть 9 - x, поэтому 1234 -> 8765.Рекурсивный метод Java для поиска дополнения

Я не могу думать, как это сделать. Это мой код до сих пор:

public static int complement(int n){ 
    int x = n % 10; 
    x = x - 9; 
    n = (n/10) 
    return complement(n,x); 
} 

public static int complement(int n ,int times){ 

} 
+0

Я не убедитесь, что вы удаляете соответствующие части своего вопроса. Они важны, поскольку они показывают текущий код, и эти усилия были сделаны. Пожалуйста, не отрицайте свою должность (даже 1-летнюю должность), это было в прошлом для этого вопроса. – Tunaki

ответ

5

Когда вы имеете дело с рекурсией, важно, чтобы написать АЛГОРИТМ сначала на английском языке (или на родном языке :)).

Для решения этой задачи, необходимо учитывать следующее:

  • У меня есть номер 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; 
}