Полный метод, вероятно, выглядит примерно так:
public int numberOfDigits(int number) {
if (number >= 10) {
return numberOfDigits(number / 10) + 1;
}
// base case: only one digit
return 1;
}
В результате проверки, если мы передадим двузначное число, будет выполнен оператор if
, который будет возвращать любой рекурсивный вызоввход / 10 есть, плюс один.Допустим, входные данные были 42
.В этом случае он вернул бы numberOfDigits(42 / 10) + 1
.Мы знаем, что numberOfDigits(4)
возвращает 1, поэтому это вернет всего 2. Это правильно.
Используя индуктивные рассуждения, мы можем построить, чтобы убедить себя в любом количестве произвольной длины.
Примечание: в моих путешествиях я чаще видел, как базовый случай обрабатывался сначала с помощью оператора if
, а индуктивный случай по умолчанию.Итак, я бы ожидал увидеть этот код:
public int numberOfDigits(int number) {
if (number < 10) return 1;
return numberOfDigits(number / 10) + 1;
}