何时将 -1 添加到数组递归?

When to add -1 to array recursion?

有一件事我看不懂,什么时候需要加-1arr.length什么时候不需要加-1

例如,如果我添加 -1:

,此代码将只工作
public boolean array220(int[] nums, int index) {
    if(index >= nums.length - 1)
        return false;
    if(nums[index] * 10 == nums[index + 1])
        return true;

    return array220(nums, index + 1);
}

如果我不添加,此代码将只工作-1:

public int array11(int[] nums, int index) {
    if(index >= nums.length)
        return 0;
    if(nums[index] == 11)
        return 1 + array11(nums, index + 1);

    return array11(nums, index + 1);
}

由于数组是从零开始的,arr.length 是数组的大小,以元素的数量表示。这意味着最后一个索引位于 arr.length-1,因为 0 是第一个元素。

没有明确的规则,例如,如果您使用 >= 而不是 >(或者更常见的是 <=<,就像在一个简单的for循环)你需要调整你的值。

在第一个示例中,您使用 nums[index] nums[index+1].

访问数组元素

由于数组查找值必须是< nums.length,约束是:

index+1 < nums.length

又名:

index < nums.length - 1

也就是说你的排除逻辑是逆向测试:

if (index >= nums.length - 1)

在第二个例子中,你只访问了nums[index],所以:

index < nums.length

排除逻辑如下:

if (index >= nums.length)

如果您的数组为空,则它包含 0 个元素且长度为 0。

如果您的数组在 0 索引中有 1 个元素,则长度为 1

如果您的数组在 0 和 1 索引中有 2 个元素则长度为 2。

等等..

我们可以注意到,每个数组的第一个索引都是 0,所以最后一个索引总是 array.length-1。

因此我们可以使用两种方法

  • 第一种方法 :如果你想使用 <

所以代码会是这样的(注意最后,i 将等于 array.length-1)

for(int i=0;i<arr.length;i++)
  • 秒method:if你想用<=

所以代码会是这样的(注意最后,i 也等于 array.length-1)

for(int i=0;i<=arr.length-1;i++)