在递归函数中计算Cyclomatic complex

时间:2018-06-10 04:30:18

标签: metrics cyclomatic-complexity

传统上,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。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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