为了更清楚地说明,我试图找到这个问题的递归函数:
我已经用迭代和循环解决了这个问题,但是由于我刚刚介绍了递归方法,所以我仍然在特别地努力解决这个问题。这是我对它的迭代解决方案。
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));
}
通过额外的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'。 但它不会被删除。我不确定我在哪里犯了错误。请帮忙。