【发布时间】:2019-09-15 19:10:27
【问题描述】:
如何在 Java 中使用递归从主数组中创建新的、更小的数组?我能想到的唯一方法就是返回一个数组,否则会超出范围。
我来这里的目的是寻找证据来证明通过数组递归与循环一样有效,因为方法中定义的数组和本地数组都指向内存中的相同位置。
但是我遇到了这个答案:https://stackoverflow.com/a/5112821/10807670,它指出您应该使用原始数组,而不是“切碎”的版本,这意味着这种事情可能会偶然发生。
我设法证明主数组和方法中定义的数组是同一个数组,但我仍然不确定如何使用递归从原始数组中创建多个子数组。
class Main {
public static void main(String[] args) {
int[] list={2,4,6,8,10};
System.out.println(list[0]);
System.out.println(list[1]);
change(list, 0);
System.out.println(list[0]);
System.out.println(list[1]);
}
public static void change(int[] list1, int index){
//does a recursive call initialize a new array or does it point to the same array in memory?
list1[index]=1; //set all indices to 1
if (index==list1.length-1) return;
else change(list1, index+1);
return;
}
}
原始响应奇怪地让我认为每次增加索引时,都会使用一个较小的数组调用 change 方法,该数组之后开始一个索引,我猜这是真的,但只是在概念上,因为这些索引仍然存在,只是没有被访问。
相反,当我更改数组 list1 时,它也会更改数组列表,正如我所料,因为它们是同一个数组。有没有办法像原帖暗示的那样“切碎”,比如说,制作一系列新数组,如 {4,6,8,10}、{6,8,10}、{8,10}等?
【问题讨论】:
标签: java arrays recursion sublist