C#实现偶数除以2直到得到奇数,代码仅执行一次如何修复
问题分析
你现有代码不符合预期的核心原因有两点:
- 单次偶数判断并执行除以2的操作后直接调用了
return语句,会直接终止方法运行,因此仅能完成一次除法运算 - 外层的for循环逻辑无意义,不需要基于初始value值做固定次数的遍历判断
修复方案
直接使用while循环判断数值是否为偶数,只要满足偶数条件就持续执行除以2的操作即可,实现代码如下:
public int InchFraction(int value) { // 只要当前值是偶数就持续除以2 while (value % 2 == 0) { value /= 2; } return value; }
该实现时间复杂度为O(log n),远优于递归实现的额外栈空间开销,同时能完全匹配需求:
- 调用
InchFraction(16)时,会依次计算16→8→4→2→1,最终返回奇数1 - 调用
InchFraction(12)时,会依次计算12→6→3,最终返回奇数3 - 输入本身就是奇数时会直接返回原数值
内容的提问来源于stack exchange,提问作者Fab
相关产品推荐
相关产品推荐

