将数组的元素递归地更改为[i] = i

时间:2013-11-22 18:46:05

标签: java arrays recursion

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数组中的元素设置为零,清除数组。我也用它作为初始化的基础。

6 个答案:

答案 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 );
}

Here is it running

答案 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}。你将如何处理这个案子?我看到的唯一方法是从intArri+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;
       }
    }