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

如何递归生成指定长度的2的幂次数组?修复现有代码问题

修复递归程序:将数组下标i元素设为2^i

原代码的核心问题是逻辑错误:每次递归时反复将前面所有元素乘2,导致最终元素值为2^(length-1 -i),和预期的2^i完全颠倒,同时冗余的循环也造成了不必要的计算。以下是修复方案:

修复后的代码

void powersOf2(int[] array) {
    powersOf2(array, 0);
}

void powersOf2(int[] array, int i) {
    // 递归终止条件:处理完所有元素时停止
    if (i == array.length) {
        return;
    }
    // 计算当前下标i对应的2^i:i=0时为1,其余为前一个元素的2倍
    array[i] = i == 0 ? 1 : array[i-1] * 2;
    // 递归处理下一个下标
    powersOf2(array, i + 1);
}

修复说明

  1. 简化递归逻辑:移除了原代码中针对数组长度为1的特殊分支,统一处理所有长度的数组。
  2. 修正值计算方式:利用2^i = 2^(i-1) * 2的数学关系,直接通过前一个元素推导当前元素值,避免了错误的循环乘操作。
  3. 明确终止条件:当i等于数组长度时,说明所有元素已处理完成,直接终止递归。

以数组长度为3为例,执行流程如下:

  • 调用powersOf2(array, 0):设置array[0] = 1,递归处理下标1
  • 调用powersOf2(array, 1):设置array[1] = 1*2 = 2,递归处理下标2
  • 调用powersOf2(array, 2):设置array[2] = 2*2 = 4,递归处理下标3
  • 调用powersOf2(array, 3):i等于数组长度,递归终止,最终数组为[1,2,4],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:25:47