当然,这可能不仅仅适用于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/