Есть ли другой способ создать треугольник паскаля?

#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. Сказав все это, это все равно очень хороший ответ. Предлагая советы, а не критику, так что голосуйте. Но я все же думаю, что вам следует избавиться от требования запоминания 🙂