gpt4 book ai didi

java - 在 Java 中使用递归清除一维数组?

转载 作者:行者123 更新时间:2023-12-01 21:36:02 25 4
gpt4 key购买 nike

我正在尝试学习递归,这对我来说是一个难以捉摸的概念。我已经完成了许多使用递归来操作原始数据类型和字符串的玩具练习。但现在我转向使用递归和数组,但我被难住了。我希望有人能帮助我迈出思考这个问题的第一步。

挑战如下:使用递归将一维 int[] 数组中的所有元素设置为全 0。不允许循环。从概念上讲,我认为解决方案是:

method clearArray(int[] array)
Check for base case: Is array of size 1?
IF YES: return array
IF NO:
(-) Create array2, size one less than original array
(-) Set first element of array2 to "0"
(-) Then recursively call clearArray(array2)

从纸面上看,这看起来很棒。下面是实际的实现:

public class RecursiveEx{
public static void main(String[] args){
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
printArray(clear(arr));
}

public static int[] clearArray(int[] arr){
if(arr.length==1){
return arr;
}
else{
int[] arr2 = new int[arr.length-1];
arr2[0]=0;
return clearArray(arr2);
}
}

这将返回一个大小为 1 的数组,设置为“0”。不好。问题在于,虽然代码递归地将数组削减为一个元素,但它并没有将原始数组恢复到其原始大小;我不知道如何附加子数组。

使用字符串,这很容易。但 String 对象允许易于使用的串联和子字符串方法。我无法弄清楚等效的数组是什么。

全面披露:我正在罗格斯大学学习 Java 101 类(class),是的,这是他们使用递归和数组为我们提供的几个编程练习中的第一个。它不是为了信用。我希望如果有人可以帮助我开始这个初始练习,我就能看到自己哪里出错了,然后淘汰其他人。

有人有什么建议或建议吗?任何事情都会受到赞赏。

非常感谢!-RAO

最佳答案

最好的方法是将数组作为参数,这样您就始终拥有它的引用,以及当前索引来跟踪最后清除的元素。

我还没有测试过该方法,但它会像这样:

void clearArray(int[] arr, int index) {
if (index >= 0) {
arr[index] = 0;
clearArray(arr, index - 1);
}
}

然后您调用电话 clearArray(arr, arr.length - 1);

关于java - 在 Java 中使用递归清除一维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com