Java рекурсия с двумя параметрами - PullRequest
0 голосов
/ 25 февраля 2020

Попытка лучше понять двойной параметр в этом вопросе рекурсии. Любая помощь приветствуется. Просто немного потерялся в том, как применить его к другим программам ie pascalValue (i, j)

   public static int pascalValue(int i, int j) {
    if (j == 0) {
        return 1;
    } else if (j == i) {
        return 1;
    } else {
        return pascalValue(i - 1, j - 1) + pascalValue(i - 1, j);
    }
}

public static void computeRow(int n) {
    int counter;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            System.out.print(pascalValue(i, j) + " ");
        }
        System.out.println();
    }
}

1 Ответ

0 голосов
/ 25 февраля 2020

См., Рекурсия с двумя параметрами работает как любая другая параметризованная рекурсия. Дополнительные параметры - это просто дополнительная информация, чтобы вы могли оценить результат. То, чего вы хотите достичь, зависит от вас.

Итак, давайте разберемся в этой функции pascalValue(i, j) в кратком изложении.

давайте посмотрим на последний оператор return в функции

return pascalValue(i - 1, j - 1) + pascalValue(i - 1, j);

Итак, pascalValues(i, j) функция вызывается дважды как:

  1. pascalValue(i - 1, j - 1)
  2. pascalValue(i - 1, j)

Теперь вот база условия:

  1. if (j == 0) { return 1; }
  2. else if (j == i) { return 1; }

Базовые условия - это не что иное, как указание функции, где остановиться, в противном случае рекурсивные вызовы продолжайте, и в конечном итоге стек будет переполнен.

Поэтому, когда базовое условие достигнуто, указанное значение возвращается к его предыдущему вызову, а результат вычисляется на основе выражения, которое в нашем случае представляет собой добавление pascalValue(i - 1, j - 1) и pascalValue(i - 1, j)

Помните, что каждый вызов будет соответствовать своему базовому условию, поэтому, если pascalValue(i - 1, j - 1) достигнет своего базового условия, будет возвращено указанное значение, которое является результатом предыдущего вызова, и этот результат будет объединен (потому что в нашем если мы добавляем результат) с другим вызовом pascalValue(i, j), т.е. pascalValue(i - 1, j) со значениями затем i, j.

И это будет продолжаться, пока все вызовы не будут вычислены и результат не будет возвращен.

Посмотрите на этот SO ответ по рекурсии для лучшего понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...