当然,这可能不仅仅适用于 C 和 Java,但这是我比较熟悉的两种语言,所以让我们举一个简单的例子:
int foo(int arg)
{
if (arg > 0)
return 1;
return 0;
}
现在,就return
而言,我看到了两种解释:
- 这是一个“不同的代码路径”,因为它退出了方法;因此,任何
return
语句都应该将复杂度增加 1。在这种情况下,上面的示例代码的复杂度为 3;或 return
只是退出方法,没有理由将其计入。在这种情况下,上面的示例代码的复杂度为 1。
就圈复杂度而言,是否有任何高于“正确”、规范的解释?我倾向于支持后一种情况,但我不是 CS 理论家......
最佳答案
该代码在函数中有两条不同的路径:一条对应于 arg > 0
为真,另一条对应于它为假。
所涉及的 return 语句的数量对此没有影响,因为它不会改变通过函数的不同路径的数量。您的代码可以重写为
int foo(int arg)
{
int retval = 0;
if (arg > 0) retval = 1;
return retval;
}
尽管少了一个 return 语句,但它具有完全相同数量的路径。
关于java - 在计算圈复杂度时,退出当前方法/函数的语句应该是它的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31699326/