You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言递归实现卡特兰数计算代码问题求助

问题根因

你的代码核心问题是整数运算顺序错误,C语言中整数除法会直接截断小数部分,你当前的实现先执行除法再执行乘法,会导致中间结果截断产生误差,举个实际例子:

  • 计算n=3的卡特兰数时,原代码先计算 (2*(2*3-1))/(3+1) = 10/4 = 2(整数截断),再乘以C(2)=2,得到错误结果4;而正确计算顺序应该是先乘后除:2*(2*3-1)*C(2) = 10*2=20,再除以4得到正确结果5。
  • 此外当n取值增大时,int类型的取值范围不足以存储卡特兰数,建议替换为更大范围的整数类型。

修改后的代码

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

// 改用long long避免溢出,调整运算顺序为先乘后除
long long catalanRecursief(int n) {
    if (n == 0){
        return 1;
    } else { 
        return (2 * (2 * n - 1) * catalanRecursief(n - 1)) / (n + 1);
    }
}

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

    printf("Catalan number: %d > %lld", n, catalanRecursief(n));
    
    getchar();
    getchar(); // 额外加一个getchar抵消scanf留下的换行符,避免运行窗口一闪而过
    return 0;
}

测试结果验证

修改后的代码可以满足你给出的所有测试要求:

  • 输入0 > 输出1
  • 输入5 > 输出42
  • 输入7 > 输出429
  • 输入9 > 输出4862
  • 输入10 > 输出16796

内容的提问来源于stack exchange,提问作者Laurens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:24:03