为什么不引发 ArraysIndexOutOfBounsException?
Why isn't the ArraysIndexOutOfBounsException raised?
我的代码在这里工作正常,但在我看来,应该抛出异常。我的功能不断调用自己。最终,它在数组中的最后一个元素上被调用并添加该数字。然后,我从下一个位置到末尾复制数组。但是因为我没有下一个元素,所以我不能从下一个元素开始复制数组(我已经在最后一个位置),为什么它可以工作?
System.out.println(sumOfArrayRecursively(new int[]{5, 9, 45, 6, 2, 7, 34, 8, 6, 90, 5, 243}));
public static int sumOfArrayRecursively(int [] arr){
if(arr.length == 0) return 0;
else{
return arr[0] + sumOfArrayRecursively(Arrays.copyOfRange(arr, 1, arr.length));
}
}
这就是递归的工作原理:最后一次调用您的函数后,数组长度为 0 并且 returns 无需尝试越界访问元素。
Here is an article describing something similar to your problem
我的代码在这里工作正常,但在我看来,应该抛出异常。我的功能不断调用自己。最终,它在数组中的最后一个元素上被调用并添加该数字。然后,我从下一个位置到末尾复制数组。但是因为我没有下一个元素,所以我不能从下一个元素开始复制数组(我已经在最后一个位置),为什么它可以工作?
System.out.println(sumOfArrayRecursively(new int[]{5, 9, 45, 6, 2, 7, 34, 8, 6, 90, 5, 243}));
public static int sumOfArrayRecursively(int [] arr){
if(arr.length == 0) return 0;
else{
return arr[0] + sumOfArrayRecursively(Arrays.copyOfRange(arr, 1, arr.length));
}
}
这就是递归的工作原理:最后一次调用您的函数后,数组长度为 0 并且 returns 无需尝试越界访问元素。
Here is an article describing something similar to your problem