当然,这可能不仅仅适用于C和Java,但这两种语言我更熟悉,所以让我们举一个简单的例子:

int foo(int arg)
{
    if (arg > 0)
        return 1;
    return 0;
}

现在,就return而言,我看到了两种解释:
这是一个“不同的代码路径”,因为它退出该方法;因此,任何return语句应该增加1的复杂度。在这种情况下,上面的示例代码具有3的复杂度;
return退出该方法,没有理由计算它。在这种情况下,上面的示例代码具有1的复杂度。
就圈复杂度而言,上面的解释是否是“正确的”、规范的?我倾向于后一种情况,但我不是CS理论家。。。

最佳答案

该代码在函数中有两条不同的路径:一条对应于arg > 0为true,另一条对应于它为false。
所涉及的return语句的数量不会影响这一点,因为它不会更改通过函数的不同路径的数量。你的代码可以重写为

int foo(int arg)
{
     int retval = 0;
     if (arg > 0) retval = 1;
     return retval;
}

它的路径数完全相同,尽管只有一个更少的return语句。

关于java - 在计算圈复杂度时,退出当前方法/函数的语句是否应该包含其中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31699326/

10-16 18:45