如何递归实现将数组中每个元素重复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]即可,不需要分支判断。
递归实现思路
递归的核心是将大问题拆解为同逻辑的子问题,设置终止条件:
- 终止条件:原数组的所有元素都已处理完毕
- 子问题逻辑:每次取出原数组当前未处理的第一个元素,将其重复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为例,递归执行流程:
- 第一次调用:处理下标0的元素8,填充结果数组0-2位为8,递归调用处理下标1
- 第二次调用:处理下标1的元素4,填充结果数组3-5位为4,递归调用处理下标2
- 第三次调用:处理下标2的元素3,填充结果数组6-8位为3,递归调用处理下标3
- 第四次调用:处理下标3的元素4,填充结果数组9-11位为4,递归调用处理下标4
- 下标4超出原数组长度4,终止递归,返回结果数组
内容的提问来源于stack exchange,提问作者judahthehogwash
相关产品推荐
相关产品推荐

