public static void what(int[] arr, int i)
{
if (i == 0)
return;
arr[arr.length - i] = i;
i--;
what(arr, i); // recursive method call
}
我在这里没有改变任何东西,数组保持不变,而[i]不是= i。我的逻辑是关闭的,任何帮助?
我做了一个以前的代码,我必须将int数组中的元素设置为零,清除数组。我也用它作为初始化的基础。
答案 0 :(得分:1)
如果你想要[i] = i,那么改为:
public static void what(int[] arr, int i)
{
if (i == 0)
return;
arr[arr.length - i] = arr.length - i;
i--;
what(arr, i); // recursive method call
}
答案 1 :(得分:0)
我会尝试调用what(array,array.length)
:
public static void what(int[] arr, int i)
{
if ( i == 0 )
return;
arr[i] = i;
what(arr, i-1); // recursive method call
}
答案 2 :(得分:0)
这是你需要的吗?
public static void what (int[] arr, int i)
{
if (i == 0)
return;
arr[i-1] = i-1;
i--;
what(arr, i); // recursive method call
}
答案 3 :(得分:0)
我觉得如果从另一方面开始,从前面开始,它更易读,更容易理解。
private static void what( int[] arr, int i )
{
if( i >= arr.length )
return;
arr[i] = i;
what( arr, i + 1 );
}
答案 4 :(得分:0)
此方法将始终返回以下内容的数组。
int arr[] = {0, 1, 2, 3, ..., n-1};
您的输入数组可能是这样的。这可能是你的结果没有改变的原因。
答案 5 :(得分:0)
在这种情况下,递归是没有意义的,因为你需要更多的代码,包括一个循环来验证第二个参数而不是解决任务。
int[] intArr = new int[]{43,56,24,745,32}
的最佳案例场景是致电what(intArr, 5)
并获取int[]{5,4,3,2,1}
当然,我们有一个最明显的问题:what(intArr,4343)
会引导我们java.lang.ArrayIndexOutOfBoundsException
,但可以轻松修复:if( i <= arr.length && i>0 )
。
如果我们将在0到5之间传递随机值(intArr.length
)
what(intArr,2)
会产生int[]{43, 56, 24, 2, 1}
。你将如何处理这个案子?我看到的唯一方法是从intArr
到i+1
循环intArr.length-1
并检查我们是否已经执行了what(intArr,3)
,what(intArr,4)
和what(intArr,5)
。
每次调用方法时,都需要遍历i-1元素并检查它是否已经处理过。
我更喜欢使用带循环的常规函数:
public static void what(int[] arr)
{
for(int i = 0; i<arr.length; i++){
arr[i] = arr.length-i;
}
}