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

为何含变量的递归代码无法运行?两段二项式系数递归代码排查

两段递归二项式系数代码的运行差异分析

核心问题出在第二段代码的rekurs函数缺少返回语句,触发了未定义行为:

第一段代码的正确逻辑

第一段的rekurs函数所有分支都有明确的返回值:

  • 触发边界条件(k=0、n=0或n=k)时,直接return 1;
  • 递归分支直接返回两次递归调用的结果之和。

代码片段:

int rekurs(int n, int k)
{   if((k==0)||(n==0)||(n==k))
    {
        return 1;
    }

    else{ 
      return rekurs(n-1,k-1)+ rekurs(n-1,k);
   }
}

第二段代码的致命缺陷

第二段的rekurs函数在边界条件分支里,只给ergebnis赋值为1,却没有执行return语句。当程序走到这个分支时,函数会执行完if块后直接走到函数末尾,没有返回任何值——这属于C语言里的未定义行为,会导致返回随机垃圾值,甚至程序崩溃。

问题代码片段:

int rekurs(int n, int k)
{ int ergebnis;
  if((k==0)||(n==0)||(n==k))
    {
        ergebnis = 1;
        // 这里没有return语句!
    }

    else{ 
      return ergebnis = rekurs(n-1,k-1)+ rekurs(n-1,k);
   }
// 函数走到此处无返回值,触发未定义行为
}

另外补充:两段代码的main函数里都有个小问题——printf中的zahlen变量未定义,但这不是第二段代码无法正常运行的核心原因。

修复第二段代码的方法

只需要在边界条件的if分支里补上返回语句即可:

int rekurs(int n, int k)
{ int ergebnis;
  if((k==0)||(n==0)||(n==k))
    {
        ergebnis = 1;
        return ergebnis; // 补上返回语句
    }

    else{ 
      return ergebnis = rekurs(n-1,k-1)+ rekurs(n-1,k);
   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:40:29