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

如何修改C语言void递归函数half,实现整数折半至1并从小到大输出

修正递归函数实现从小到大输出

你的代码问题在于打印操作在递归调用之前,导致先输出大的数值,再逐层输出更小的。要实现从小到大输出,只需调整递归和打印的顺序:先递归处理更小的数值,回溯时再打印当前值。

修正后的代码:

void half(int value) {
    if (value > 1) {
        half(value / 2);  // 优先递归处理折半后的值
        printf("%d\n", value);  // 回溯阶段打印当前数值
    } else {
        printf("1\n");  // 输出最底层的1,添加换行保持格式一致
    }
}

逻辑说明

以输入8为例,递归执行流程如下:

  1. 调用half(8),先执行half(4)
  2. 调用half(4),先执行half(2)
  3. 调用half(2),先执行half(1)
  4. half(1)触发else分支,打印1
  5. 回溯到half(2),打印2
  6. 回溯到half(4),打印4
  7. 回溯到half(8),打印8

最终输出顺序为1、2、4、8,完全符合从小到大的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:25:32