当然,这可能不仅仅适用于C和Java,但这些是我更熟悉的两种语言,所以让我们举一个简单的例子:
int foo(int arg)
{
if (arg > 0)
return 1;
return 0;
}
现在,就return
而言,我已经看到了两种解释:
return
语句都应该将复杂性提高1.在这种情况下,上面的示例代码的复杂度为3;或return
只退出该方法,没有理由将其计入。在这种情况下,上面的示例代码的复杂度为1. 就圈复杂性而言,是否有任何解释高于"正确",规范的解释?我倾向于支持后一种情况,但我不是CS理论家......
答案 0 :(得分:3)
该代码在函数中有两条不同的路径:一条对应arg > 0
为真,另一条对应为假。
所涉及的返回语句数量不会影响该数量,因为它不会更改通过该函数的不同路径的数量。您的代码可以重写为
int foo(int arg)
{
int retval = 0;
if (arg > 0) retval = 1;
return retval;
}
具有完全相同的路径数,尽管返回语句少一个。
答案 1 :(得分:1)
你的圈复杂度将是2,原因如下:
您的代码基本上是这样的:
int foo(int arg)
{
int out;
if (arg > 0)
out = 1;
else
out = 0;
return out;
}
普通return
陈述不计入复杂性。您只有1 if
个语句,没有if else
个语句。因此,您的圈复杂度将为2,因为主路径有1条备用路径。
如果返回语句计数,那么同一方法的圈复杂度可能是3 OR 4(参见我的代码与你的代码),这应该清楚为什么不包含return语句。