如何简化计算整数闭区间偶数和的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
相关产品推荐
相关产品推荐

