传统上,Cyclomatic Complexity(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。
感谢您的帮助。
答案 0 :(得分:2)
见https://en.m.wikipedia.org/wiki/Cyclomatic_complexity。根据定义,递归不会影响圈复杂度,测量它的工具也不会实际“运行”代码并对其进行测量。这是因为McCabe的原始定义指出CC是代码可以采用的可能路径的数量,而这就是它。如果您仍然不相信,只需给它一个不同的名称,比如递归圆柱复杂度,并通过计算运行时的实际调用次数来测量它。请参阅:https://www.guru99.com/cyclomatic-complexity.html