Люди, помогите пожалуйста написать программу вычисления чисел Каталана на Паскале.
Я учуюсь на 1 курсе и мне не понятна даже сама формула, кто может объяснить как она работает???
Я учуюсь на 1 курсе и мне не понятна даже сама формула, кто может объяснить как она работает???
1) n = 0
C[n] = C[0] = 1
2) n = 1, i = 0 -> 0
C[n] = C[1] = C[0] * C[0] = 1 * 1 = 1
3) n = 2, i = 0 -> 1
C[n] = C[2] = C[0] * C[1] + C[1] * C[0] = 1 * 1 + 1 * 1 = 1 + 1 = 2
4) n = 3, i = 0 -> 2
C[n] = C[3] = C[0] * C[2] + C[1] * C[1] + C[2] * C[0] = 1 * 2 + 1 * 1 + 2 * 1 = 2 + 1 + 2 = 5
и т.д.
Хотя вроде дает нужный результат.
Старался соответствовать формуле, что бы было понятнее - поэтому ни разу не оптимальное решение.
#include
using namespace std;
int katalans_number(int n);
int main()
{
// Цикл перебирает числа Каталана от 0 до 9
for(int i = 0; i < 10; i++)
{
// Собственное, выводит i-ое число
cout << i << " number = " << katalans_number(i) << endl;
}
return 0;
}
// Рекурсивная функция вычисления числа Каталана n
int katalans_number(int n)
{
// Постарался максимально соответствовать форумуле
// Если n = 0, то нулевое число Каталана - это 1
if (n == 0)
return 1;
// Если n не равно 0, то
else
{
int tmp = 0; // Временная переменная, в которую будем накапливать сумму
// Цикл суммирования
for(int i = 0; i <= n - 1; i++)
{
// К уже накопленной сумме добавляем произведение двух чисел каталана
tmp += katalans_number(i) * katalans_number(n - 1 - i);
}
return tmp;
}
}
Под PascalABC.NET (pascalabc.net/) работает.
Спрашивает n и для него выводит число Каталона соответсвующее.