当涉及到递归函数时计算圈复数



传统上,圈复杂度(CC(可以通过使用"if-else"的数量然后加一的方式来获得。但是当涉及到递归函数时,我发现我无法弄清楚"if-else"的数量。更具体地说,在此代码块中

public int m1(int k){
if(k==0)
return 0;
else
return m2(k-1)+(k%2);
}
public int m2(int k){
if(k==0)
return 0;
else
return m1(k-1)+(1-k%2);
}

如何确定 m1 的 CC

?解释:

定义一个函数 CC(func(,它代表函数 "func" 的 CC

所以, CC(m1( = 1(k==0( + CC(m2( (k!=0(

CC(m2( = 1(k==0( + CC(m1( (k!=0(

我的意思是,我们应该考虑调用的函数的 CC。

感谢您的帮助。

请参阅 https://en.m.wikipedia.org/wiki/Cyclomatic_complexity。根据定义,递归不会影响圈复杂度,测量它的工具实际上也不会"运行"代码并测量它。这是因为 McCabe 的原始定义指出 CC 是代码可以采用的可能路径的数量,仅此而已。如果您仍然不相信,只需给它一个不同的名称,例如递归 cylcomatic 复杂性,并通过计算运行时的实际调用次数来测量它。参考: https://www.guru99.com/cyclomatic-complexity.html

最新更新