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

如何递归实现将数组中每个元素重复n次的功能

数组元素按序重复n次的递归实现

需求明确

  • 输入原始数组:[8, 4, 3, 4]
  • 每个元素重复次数:n=3
  • 预期输出结果:[8, 8, 8, 4, 4, 4, 3, 3, 3, 4, 4, 4]

前置说明

你提供的迭代实现中,两个if判断是完全冗余的,不管j%n是否为0,都执行相同的赋值操作,直接写b[j] = a[i]即可,不需要分支判断。


递归实现思路

递归的核心是将大问题拆解为同逻辑的子问题,设置终止条件:

  1. 终止条件:原数组的所有元素都已处理完毕
  2. 子问题逻辑:每次取出原数组当前未处理的第一个元素,将其重复n次追加到结果数组中,再递归处理剩下的原数组元素

完整可运行递归代码

import javax.swing.*;
import java.util.Arrays;

public class RepeatElementRecursive {
    // 递归辅助方法:参数分别是原始数组、重复次数、当前处理到的原数组下标、结果数组
    private static void fillArray(int[] original, int repeatTimes, int currentIndex, int[] result) {
        // 终止条件:所有原数组元素都处理完了
        if (currentIndex >= original.length) {
            return;
        }
        // 把当前元素填充到结果数组对应的位置
        int currentValue = original[currentIndex];
        int startPos = currentIndex * repeatTimes;
        for (int i = 0; i < repeatTimes; i++) {
            result[startPos + i] = currentValue;
        }
        // 递归处理下一个元素
        fillArray(original, repeatTimes, currentIndex + 1, result);
    }

    // 对外暴露的调用方法
    public static int[] repeatElements(int[] original, int repeatTimes) {
        if (original == null || original.length == 0 || repeatTimes <= 0) {
            return new int[0];
        }
        int[] result = new int[original.length * repeatTimes];
        fillArray(original, repeatTimes, 0, result);
        return result;
    }

    public static void main(String[] args) {
        int[] a = {1,2,3};
        int n = Integer.parseInt(JOptionPane.showInputDialog("Enter n"));
        int[] b = repeatElements(a, n);
        JOptionPane.showMessageDialog(null, Arrays.toString(b));
    }
}

递归逻辑验证

以你给出的示例输入[8,4,3,4]、n=3为例,递归执行流程:

  1. 第一次调用:处理下标0的元素8,填充结果数组0-2位为8,递归调用处理下标1
  2. 第二次调用:处理下标1的元素4,填充结果数组3-5位为4,递归调用处理下标2
  3. 第三次调用:处理下标2的元素3,填充结果数组6-8位为3,递归调用处理下标3
  4. 第四次调用:处理下标3的元素4,填充结果数组9-11位为4,递归调用处理下标4
  5. 下标4超出原数组长度4,终止递归,返回结果数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:02