#c #recursion #parameters #cout #pascals-triangle
#c #рекурсия #параметры #cout #паскаль-треугольник
Вопрос:
Я пытаюсь распечатать треугольник паскаля.
и это обычный
int pascal(int l, int n) {
if (l == n || n == 0)
return 1;
else
return pascal(l - 1, n) pascal(l - 1, n - 1);
}
но я хочу использовать только одну функцию pascal для рекурсии, например
int pascal(int l, int n) {
return pascal();
}
Есть ли какое-либо решение для данного условия?
Комментарии:
1. Не могли бы вы немного пояснить свой вопрос?
Ответ №1:
Да, вы можете сделать это путем запоминания, потому что есть перекрывающаяся подзадача.
int pascalTriangle(int row, int col) {
if (col == 0)
return 1;
if (row == 0)
return col;
return row * pascalTriangle(row - 1, col - 1) / col;
}
Комментарии:
1. это круто! Я, наконец, решил свою проблему с этим!
2. Это хороший ответ, но я не понимаю, как это запоминается, когда на самом деле ничего не запоминается 🙂 Это просто стандартное рекурсивное решение. Запоминание было бы, например, сохранением некоторых уже вычисленных результатов в контейнере для последующего возврата без пересчета.
3. Кроме того, имеет больше смысла использовать
row
col
переменные и, а не указыватьl
строку иn
столбец, тем более, что иногда бывает трудно определить разницу междуl
и1
.4. Кроме того,
if condition return else something
конструкция является одной из тех вещей, которых вам следует избегать —else
в подобных случаях совершенно не нужна, она становится бесполезной из-заreturn
.5. Сказав все это, это все равно очень хороший ответ. Предлагая советы, а не критику, так что голосуйте. Но я все же думаю, что вам следует избавиться от требования запоминания 🙂