回避:安全检查的顺序与基本情况重要吗?

问题描述 投票:0回答:1

我正在学习动态编程,我在创建递归代码时观察到,有时我们先检查越界条件,然后检查其他基本情况,有时我们先检查其他基本情况,然后再检查越界情况- 约束条件。我如何知道选择哪个订单?

例如,问题的条件可能如下排序:

if (i < 0 || j < 0 || i >= matrix.length || j >= matrix[0].length)
{
    return Integer.MAX_VALUE;
}
if (i == matrix.length - 1)
{
    return matrix[i][j];
}

而在其他情况下,首先进行

i == matrix.length - 1
检查:

if (i == matrix.length - 1)
{
    return matrix[i][j];
} 
if (i < 0 || j < 0 || i >= matrix.length || j >= matrix[0].length)
{
    return Integer.MAX_VALUE;
}

在解决递归问题时,我很困惑何时选择使用哪种条件顺序。

recursion dynamic-programming
1个回答
1
投票

在这种特定情况下,这没有什么区别,因为它们检查的值不重叠。

  • i == matrix.length - 1
    检查
    i
    是否是矩阵中的最后一个元素
  • i < 0 || j < 0 || i >= matrix.length || j >= matrix[0].length
    检查以确保 i/j 在矩阵的限制内。

例如,4x4 矩阵的

i
j

的长度均为 4
  • if (i == matrix.length - 1)
    将是
    if (i == 3)
  • if (i < 0 || j < 0 || i >= matrix.length || j >= matrix[0].length)
    将是
    if (i < 0 || j < 0 || i >= 4 || j >= 4)

注意第一个 if 语句仅检查索引 3,而另一个 if 语句检查除 0-3 之外的所有索引。


仅当基本情况可能包含越界值时,这些 if 语句的顺序才重要。例如,如果将

i == matrix.length - 1
检查写为
i >= matrix.length - 1
,那么首先对其进行排序将导致程序对
matrix
进行索引越界。

我个人会把越界检查放在第一位,因为我更清楚这只是一个安全检查,但这只是意见。

© www.soinside.com 2019 - 2024. All rights reserved.