Код, как указано, дает неправильные ответы;строка 5 должна читать return 1;
, а не return -1;
.
Java вычисляет вызов метода power
, вызывая его.Здесь это ничем не отличается, это может вас немного смущать, потому что мы вызываем метод power из метода power.Что хорошо в java.
Итак, давайте попробуем power(3, 4)
в качестве примера.
Java сначала проверит, если это 4 ниже 0. Это не так, пропустите это.Тогда, если это 0. Это не так, так что пропустите.Затем он вернет результат выражения (заполнив значения переменной): return 3 * power(3, 4 - 1)
.Чтобы вычислить это, сначала нужно вычислить power(3, 3)
.
Так что Java ... делает это.Он запоминает свою половину проделанной работы над power(3, 4)
(он делает это «в стеке») и теперь начинает вычислять power(3, 3)
.Ответ - оценить return 3 * power(3, 2)
.Итак, Java запоминает половину работы, проделанной для power(3, 3)
, и идет на ее вычисление.Ответ - результат return 3 * power(3,1)
.Вы уже догадались, вспомните нашу работу и снова вызовите power: return 3 * power(3, 0)
, но, наконец, мы вышли: вызов метода power(3, 0)
разрешается вторым 'if', таким образом, происходит return 1;
.power(3, 0)
успешно завершено!Теперь power(3, 1)
может завершиться, затем power(3, 2)
может завершиться до конца, и 81 возвращается.