Рекурсивный метод для удаления всех нечетных цифр из int - PullRequest
1 голос
/ 15 марта 2020

У меня проблемы с написанием рекурсивного метода, который предназначен для удаления любых нечетных цифр из целого числа - например: evenDigits(123456) должен вернуть 246. Моей первой мыслью было превратить int в строку и циклически проходить таким образом, но вопрос явно гласит, что вы не можете использовать Strings для ее решения.

Любая помощь приветствуется

РЕДАКТИРОВАТЬ: Вот что До сих пор, я не уверен, что это правильно, но я не могу понять, что делать, если последний ди git должен был быть даже

public static int evenDigits(int n)

if(n==2)
{
    return 2;
}

if(n==1)
{
    return 0;
}

if((n%10)%2==1) //if the last digit is odd
{
    return evenDigits(n/10); //run it again without the last digit
}

1 Ответ

3 голосов
/ 15 марта 2020

Поскольку это, очевидно, домашняя работа, я не могу дать полное решение, однако вот несколько советов:

Когда вы определяете рекурсию, вы должны думать, когда вы останавливаетесь (условие остановки). Если вы будете следовать указаниям @marksplace - тогда вы, вероятно, остановитесь, когда рекурсия достигнет точки, в которой не осталось цифр.

Еще одна вещь, о которой вы должны подумать, это где хранить результат, «накопленный до сих пор». ». Вы пройдете через рекурсию. Его даже называют «аккумулятор» в литературе. Поэтому, когда вы достигнете состояния остановки, вы вернете аккумулятор. Кроме того, подумайте, как именно вы собираетесь обновить аккумулятор.

Вот пример того, как он может работать без погружения в код:

  1. 123456 a. Последнее di git равно 6, его четное, сохраните его, обновите аккумулятор (= 6) b. рекурсивный вызов для 12345
  2. 12345 - последний ди git нечетный - удалить его, b. рекурсивный вызов для 1234
  3. 1234 - последнее число git равно 4 - его четное, сохраните его, обновите аккумулятор 6 -> 46 (здесь следует подумать о математической формуле такого обновления)

....

Наконец - остановитесь, когда дойдете до точки, где нет цифр, аккумулятор будет содержать ответ

Удачи!

...