如何修改C语言void递归函数half,实现整数折半至1并从小到大输出
修正递归函数实现从小到大输出
你的代码问题在于打印操作在递归调用之前,导致先输出大的数值,再逐层输出更小的。要实现从小到大输出,只需调整递归和打印的顺序:先递归处理更小的数值,回溯时再打印当前值。
修正后的代码:
void half(int value) { if (value > 1) { half(value / 2); // 优先递归处理折半后的值 printf("%d\n", value); // 回溯阶段打印当前数值 } else { printf("1\n"); // 输出最底层的1,添加换行保持格式一致 } }
逻辑说明
以输入8为例,递归执行流程如下:
- 调用
half(8),先执行half(4) - 调用
half(4),先执行half(2) - 调用
half(2),先执行half(1) half(1)触发else分支,打印1- 回溯到
half(2),打印2 - 回溯到
half(4),打印4 - 回溯到
half(8),打印8
最终输出顺序为1、2、4、8,完全符合从小到大的要求。
内容的提问来源于stack exchange,提问作者alexh14
相关产品推荐
相关产品推荐

