在 C 中计算加泰罗尼亚数

Calculating a catalan number in C

我正在努力处理一些我必须为 C 中的作业编写的代码。我必须递归地计算加泰罗尼亚语数字。 给出以下公式: Formula IMG.

遮阳篷应该是:

0 > 1(填0应该打印1)

5 > 42(填写 5 应该打印 42)

7 > 429(填写 7 应该打印 429)

9 > 4862(填写 9 应打印 4862)

10 > 16796(填写 10 应该打印 16796)

请看一下:

#pragma warning(disable : 4996)
#include <stdio.h>

int catalanRecursief(int n) {
    if (n == 0){
        return 1;
    } else { 
        return (2 * ((2 * n) - 1)) / (n + 1) * (catalanRecursief(n - 1));
}
}


int main(void){
    int n;
    printf("Catalan printer\n\n");
    printf("What catalan number do you want to calculate? ");
    scanf("%d", &n);

    /*catalanRecursief(n);*/

    printf("Catalan number: %d > %d", n, catalanRecursief(n));
    
    getchar();
    return(0);
    
}

把单位从n改成float就可以解决了

int catalanRecursief(float n) {
  if (n == 0) {
    return 1;
  } else {
    return ((2 * ((2 * n) - 1)) / (n + 1)) * (catalanRecursief(n - 1));
  }
}

int catalanRecursief(int n) {
  if (n == 0) {
    return 1;
  } else {
    return ((2.0 * ((2 * n) - 1)) / (n + 1)) * (catalanRecursief(n - 1));
  }
}

这是因为除以整数 c 会截断它们

正如 theory 所说的加泰罗尼亚数字是整数,您应该确保除法最后发生以避免整数除法截断:

...
else {
    return (2 * ((2 * n) - 1)) * (catalanRecursief(n - 1)) / (n + 1);
}
...

对于 32 位整数,预计会从 C17 开始溢出,因此如果您想更进一步,请使用 long long...