Рассчитать цикломатический комплекс, когда дело доходит до рекурсивной функции - PullRequest
0 голосов
/ 10 июня 2018

Традиционно Cyclomatic Complexity (CC) можно получить, используя способ, которым число «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);
}

Как определить CC m1?

Объяснение:

определить функцию CC (func), которая обозначаетCC функции "func"

Итак, CC (m1) = 1 (k == 0) + CC (м2) (k! = 0)

И CC (м2) =1 (k == 0) + CC (m1) (k! = 0)

Я имею в виду, мы должны учитывать CC вызванных функций.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 10 июня 2018

См. https://en.m.wikipedia.org/wiki/Cyclomatic_complexity. Рекурсия по определению не влияет на цикломатическую сложность, и инструменты, ее измеряющие, также фактически не «запускают» код и не измеряют его.Это связано с тем, что в первоначальном определении McCabe говорится, что CC - это число возможных путей, по которым может идти код, и это все.Если вы все еще не уверены, просто дайте ему другое имя, скажем рекурсивная цилиндрическая сложность , и измерьте его, посчитав фактическое количество вызовов во время выполнения.См .: https://www.guru99.com/cyclomatic-complexity.html

...