English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C программа для генерации n-го catalan числа

Данное целое число n; задача - найти каталонский номер на n-м месте. Таким образом, перед выполнением программы我们必须 знать, что такое каталонские числа?

Числа Каталана являются последовательностью натуральных чисел,出现的各种计数ных задачах.

Каталонские числа C0, C1, C2, ... Cn определяются формулой -

c_{n} = frac{1}{n + 1} binom{2n}{n} = frac{2n!}{(n + 1)!n!}

Каталонские числа для n = 0, 1, 2, 3, ... и т.д.1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862 ...

Таким образом, если мы вводим n = 3, мы должны получить 5 в качестве вывода из программы

Некоторые приложения каталонских чисел-

  • Рассчитать количество возможных двоичных搜索 деревьев с помощью n ключей.

  • Найти количество выражений, содержащих n пар правильно совпадающих скобок. Например, при n = 3 возможные выражения с скобками: ((()))(), ()(()), ()()(), (()()), (()()).

  • Методы поиска точек соединения на不相交的 дугах окружности и т.д.

Пример

Ввод: n = 6
Вывод: 132
Ввод: n = 8
Вывод: 1430

Метод, который мы будем использовать для решения данной задачи-

  • Взять и ввести n.

  • Проверить n <= 1, затем вернуть 1

  • Цикл от i = 0 до i < n и i++

  • Для каждого i установить результат = результат + (catalan(i) * catalan(n - i - 1))

  • Вернуть и вывести результат.

Алгоритм

Начало
   Шаг 1 -> В функции unsigned long int catalan(unsigned int n)
      Если n <= 1 тогда,
         Вернуть 1
      Конец if
      Установить unsigned long переменную res = 0
      Цикл для i=0 и i<n и i++
         Установить res = res + (catalan(i) * catalan(n - i - 1))
      Конец цикла
      Вернуть res
   Шаг 2 -> int main() -> Declare an input n = 6
   Вывести "Catalan is :", затем вызвать функцию catalan(n)
Стоп

Пример

#include <stdio.h>
//Использование рекурсивного метода для нахождения Catalan чисел
unsigned long int catalan(unsigned int n) {
   //Основные условия
   if (n <= 1) return 1;
   //Catalan (n) равен сумме Catalan (i) * Catalan (n - i - 1)
   unsigned long int res = 0;
   for (int i = 0; i < n; i++)
      res += catalan(i) * catalan(n - i - 1);
   return res;
}
//Основная функция
int main() {
   int n = 6;
   printf("Catalan is :%ld\n", catalan(n));
   return 0;
}

Результат вывода

Catalan is :132
Основной учебник
Вам может понравиться