当前位置: 首页 > 知识库问答 >
问题:

如何递归重复数组中元素的n倍?

柴瀚昂
2023-03-14

为了更清楚地说明,我试图找到这个问题的递归函数:

    null

我已经用迭代和循环解决了这个问题,但是由于我刚刚介绍了递归方法,所以我仍然在特别地努力解决这个问题。这是我对它的迭代解决方案。

public class repeatElement {

public static void main(String[] args) {
    int[] a = {1, 2, 3};
    int n, j, i;
    n = Integer.parseInt(JOptionPane.showInputDialog("Enter n"));
    int[] b = new int[a.length * n];

    for (i = 0; i < a.length; i++) {
         for (j = n*i; j < n*(i+1); j++) {
            if (j % n == 0) {
                b[j] = a[i];
            }
            if (j % n != 0) {
                b[j] = a[i];
            }
        }
    }
    JOptionPane.showMessageDialog(null, Arrays.toString(b));
}

共有1个答案

詹夕
2023-03-14

通过额外的index参数,可以用递归模拟for循环。在方法结束时,再次递归调用索引+1的方法。当index到达数组末尾时,该方法应该返回,就像for循环一样:

private static void repeatEachElement(int times, int[] input, int[] output, int index) {
    // stopping condition
    if (index == output.length) {
        return;
    }

    // this is where it fills the array.
    output[index] = input[index / times];

    // calls itself again with index + 1
    repeatEachElement(times, input, output, index + 1);
}

注意,我在输出数组上“循环”,这样我就不需要另一个循环来填充每个索引。我可以通过执行输入[index/times]来获取应该在该索引处的元素。

要调用此方法,首先需要创建一个长度正确的输出数组,index必须从0开始。您可以将此方法包装成更方便的方法:

private static int[] repeatEachElement(int times, int[] input) {
    int[] output = new int[input.length * times];
    repeatEachElement(times, input, output, 0);
    return output;
}

然后你可以做:

int[] input = {8, 4, 3, 4};
System.out.println(Arrays.toString(repeatEachElement(3, input)));
// [8, 8, 8, 4, 4, 4, 3, 3, 3, 4, 4, 4]

不过,归根结底,除了了解递归的工作原理之外,在Java中进行递归操作没有什么意义。它的可读性不如循环,如果数组足够长,它将溢出堆栈。

 类似资料:
  • 如何在Java中复制数组的元素,并按原始数组的相同顺序将它们添加到新数组中 请解释为什么上面的代码不起作用。 我的输出是 : // [4, 4, 代替:

  • 在这种类型的数据结构中,我可以借助方法获取ArrayList的元素。有没有办法返回字符串数组的某个元素?(例如,当我说时,它返回,但我想返回)

  • 要从复杂对象中删除某些字段。 我想删除'阴谋'

  • 问题内容: 我正在我的应用程序中使用React / JSX来完成我想要的,Lodash。 我需要根据条件重复元素一定次数。我该怎么办? 这是元素: 我将其分配为: 因此,在这种情况下,我需要重复元素时间。使用Lodash的程序应该是什么? 问题答案: 干得好: 您可能想要向每个元素添加键,以便React不会抱怨缺少key属性: 有关的更多信息,请参见此处:https : //lodash.com/

  • 下面是我的数组, 这些字段来自,我在模型中声明了每个字段。这里我想删除数组中的'isMater'和'u id'。 但它不会被删除。我不确定我在哪里犯了错误。请帮忙。