См., Рекурсия с двумя параметрами работает как любая другая параметризованная рекурсия. Дополнительные параметры - это просто дополнительная информация, чтобы вы могли оценить результат. То, чего вы хотите достичь, зависит от вас.
Итак, давайте разберемся в этой функции pascalValue(i, j)
в кратком изложении.
давайте посмотрим на последний оператор return в функции
return pascalValue(i - 1, j - 1) + pascalValue(i - 1, j);
Итак, pascalValues(i, j)
функция вызывается дважды как:
pascalValue(i - 1, j - 1)
pascalValue(i - 1, j)
Теперь вот база условия:
if (j == 0) {
return 1;
}
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 ответ по рекурсии для лучшего понимания.