#java #recursion #numbers #return #multiplication
#java #рекурсия #числа #Возврат #умножение
Вопрос:
private static int nTimesK(int n, int k) {
System.out.println("n: " n);
// Recursive Case
if(n > 1) {
return k nTimesK(n - 1, k);
}
// Base Case n = 1
else {
return k;
}
}
public static void main(String[] args) {
int result = nTimesK(4, 4);
System.out.println("Result: " result);
}
Запрос:
он выполняется как return k ntimesK(3,4), он выполняется как return k ntimesK (2,4), он выполняется как return k ntimesK(1,4)
где n = 1 — базовый вариант. хотел знать, как 4 ntimesK(3,4) приведет к значению 8, за которым следует 12 и, наконец, 16.
Комментарии:
1. В чем ваш вопрос?
2. Итак, это работает, но вы хотите, чтобы это объяснили?
3. да @NomadMaker . Объяснение было дано, как я упоминал в запросе. нужно знать, как вернуть k ntimes (3,4) равным 8. Я новичок в программировании и пытаюсь учиться, поэтому надеюсь, что какой-нибудь текст поможет понять это.
4. Это просто неэффективный способ демонстрации умножения посредством повторного сложения.
Ответ №1:
Предположим, вы вызываете метод, передающий в 4 и 4 (т. Е. nTimesK(4,4)), внутри метода, поскольку n> 1 (4 больше 1) он выполняется return k nTimes(n-1, k)
. Оператор заменяется на 4 nTimesK(3,4)
(мы называем этот пункт A). Вычисление не может вернуть ответ, потому что ему приходится ждать результата nTimesK(3,4)
. Когда вызывается nTimesK(3,4), он должен вернуться 4 nTimesK(2,4)
(мы называем эту точку B) к первому вызову (A). Он должен дождаться nTimesK(2,4)
выполнения, прежде чем возвращать результат. Итак, вызывается nTimesK(2,4), и он возвращает 4 nTimesK(1,4)
(мы называем эту точку C). Когда C выполняет nTimesK(1,4), вызов возвращает 4 (являющееся базовым условием. т. е. n = 1). Таким образом, C теперь может возвращать 4 4 (=8)в B. B также теперь может возвращать 4 8 (= 12) в A. A вычисляет 4 12 (=16) и возвращает ответ на исходный вызов. Отсюда и значение 16.