#java
#java
Вопрос:
Я действительно запутался в этой программе:
public static int product(int n1, int n2) {
if (n2== 0 || n1==0) {
return 0;
}
n1 = product(n1, n2 - 1);
return n1;
}
Предположим, я создал произведение (3,2), тогда функция must возвращает:
Значения 3>0 и 2> 0, тогда n1 = 3 произведение (3,1)
Значения 3>0 и 1> 0, тогда n1 = 3 3 произведение (3,1)
3> 0, но 0 ==0 затем возвращает 0; но это возвращает 6.
Может ли кто-нибудь это объяснить?
Комментарии:
1. 3 3 равно 6. Есть ли проблема с этим?
2. Выполните это в своем отладчике. Это прояснит ситуацию.
3. Примечание сбоку: Нет необходимости писать обратно в
n1
. Простоreturn n1 product(n1, n2 - 1);
4. Да, он возвращает 0 при этой рекурсии. Поскольку вызов разрешен, он проходит весь путь вверх по стеку до того места, где вы его впервые вызвали, и возвращает 6.
5. @Br.sasa это вернет ноль, а не 3.
Ответ №1:
Вы правы в своем объяснении того, как работает метод, но помните, поскольку это рекурсивный метод, в конечном итоге он возвращает сумму всех возвратов. Позвольте мне объяснить: первая рекурсия возвращает 3 произведение (3, 1). Однако ваша программа еще не знает, что такое произведение (3, 1), поэтому оно должно продолжаться перед возвратом. Вторая рекурсия (произведение(3, 1)) возвращает 3 произведение(3, 0). Опять же, ваша программа должна продолжить рекурсию, чтобы найти произведение(3,0). Третья и последняя рекурсия возвращает 0, как вы сказали, но ОКОНЧАТЕЛЬНЫЙ ответ восходит к ответу первой рекурсии, 3 произведение (3, 1). Мы знаем, что произведение (3,1) = 3 произведение(3,0), а произведение (3,0) = 0. Итак, произведение(3, 2) = 3 3 0, которое равно 6. В вашем ответе указано, что вы ожидали получить только окончательную рекурсию для ответа, но из-за вашего оператора return это комбинация из трех.