2014-02-24 50 views
0

我试图创建一个方法来检查递增递增元素的数组。如果所有元素都按升序排列,则应返回True。当我比较arr[i+1]时,我得到一个IndexOutOfBoundsException。任何关于如何让它工作的想法。递归 - 检查数组是否增加

public static boolean isAscending(int[] array) { 
    int n = array.length - 1; 
    if(array.length == 0 || array.length == 1 || n == 1) 
     return true; 
    else if (array[n] <= array[n-1]){ 
     return false; 
    } 

    if isAscending(array); 
     return true; 
} 
+0

'如果isAscending(阵列);'将无法编译。是否缺少一些代码? – MAV

+0

@MAV:因为我已经完成了直接的Java,但为什么不直接返回递归调用的结果呢? –

+1

每次你打电话时,它都会做同样的事情。 – clcto

回答

0

而且我没有看到任何arr[i+1],你必须减少你使用递归调用数组的大小(和删除最后一个if;),否则你会调用该方法一遍又一遍地输入相同的输入。

+0

我希望在进行下一次递归调用之前,不要建议创建并复制到新阵列。那就是'O(n^2)',比跟踪当前要比较的索引更复杂。 – clcto

+0

当我们将迭代任务写成递归函数时,我们是否真的在讨论复杂性? :-) – Smutje

0

您需要跟踪您目前正在查看的索引。现在你总是看着数组中的最后一个索引。此外,您目前不检查前两个索引是否按升序排列,因为您当前停止的时间为n == 1而非n == 0

public static boolean isAscending(int[] array){ return isAscendingHelper(array, array.length - 1); } 

private static boolean isAscendingHelper(int[] array, int index) 
{ 
    if(index <= 0) 
     return true; 
    else if(array[index] <= array[index-1]) 
     return false; 
    else 
     return isAscendingHelper(array, index - 1); 
} 
0

如果你需要保持你原来的方法签名:

public static boolean isAscending(int[] array) { 
    if (array.length == 0 || array.length == 1) { 
    return true; 
    } 
    int[] temp = Arrays.copyOfRange(array, 1, array.length); 
    if (array[0] < temp[0]) { 
    return isAscending(temp); 
    } 
    return false; 
}