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

如何简化计算整数闭区间偶数和的C语言递归函数代码

单递归调用优化实现

你要的仅保留1次递归调用的实现可以直接把公共的递归逻辑提前到奇偶分支外,优化后逻辑和原有代码100%一致,所有打印、计算结果完全不变:

int sum_evens(int range_start, int range_end)
{
   int even_sum = 0; /* 整数闭区间内所有偶数的和 */

   printf("\n   Entering sum function for range %d to %d", 
                                            range_start, range_end);
                                            
   if(range_start <= range_end)
   {
      // 先处理当前数的打印逻辑
      if(is_even(range_start) == 0)
      {
         printf("\n      Adding: %d", range_start);
      }
      else
      {
         printf("\n      Skipping: %d", range_start);
      }
      // 仅保留1次递归调用,先拿到后续区间的偶数和
      even_sum = sum_evens(range_start + 1, range_end);
      // 再判断是否需要累加当前数
      if(is_even(range_start) == 0)
      {
          even_sum += range_start;
      }
  }

  printf("\n   Exiting sum function for range %d to %d with result: %d",
     range_start, range_end, even_sum);
  
 return even_sum;
}

逻辑说明

原有代码的两个分支里都会执行完全相同的递归调用,唯一区别是偶数分支多了一步当前值累加。优化后:

  • 先统一执行当前数的打印逻辑,顺序和原代码完全一致,输出日志不会有变化
  • 仅调用1次递归拿到[range_start+1, range_end]区间的偶数和
  • 最后根据当前数的奇偶性,决定是否要把当前值累加到总和里,计算结果和原代码完全等价

如果要进一步简化判断,也可以把累加逻辑改成三元运算符:

even_sum += is_even(range_start) == 0 ? range_start : 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:03