给定整数n; 任务是在第n个位置上找到加泰罗尼亚编号。因此,在执行程序之前,我们必须知道什么是加泰罗尼亚语数字?
Catlan数是自然数的序列,以各种计数数问题的形式出现。
加泰罗尼亚语数字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一样,可能的括号表达式为(((())),()(()),()()(),(())(),(()())。
寻找在圆不相交的弦上连接点的方法,等等。
Input: n = 6 Output: 132 Input: n = 8 Output: 1430
我们将用来解决给定问题的方法-
取并输入n。
检查n <= 1,然后返回1
从i = 0循环到i <n和i ++
对于每个i Set结果=结果+(catalan(i)* catalan(ni-1))
返回并打印结果。
Start Step 1 -> In function unsigned long int catalan(unsigned int n) If n <= 1 then, Return 1 End if Declare an unsigned long variable res = 0 Loop For i=0 and i<n and i++ Set res = res + (catalan(i)*catalan(n-i-1)) End Loop Return res Step 2 -> int main() Declare an input n = 6 Print "catalan is : then call function catalan(n) Stop
#include <stdio.h> //使用递归方法找到加泰罗尼亚数字 unsigned long int catalan(unsigned int n) { //基本情况 if (n <= 1) return 1; //加泰罗尼亚语(n)是加泰罗尼亚语(i)*加泰罗尼亚语(ni-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