循环复杂度(Cyclomaticcomplexity)也称为条件复杂度,是一种软件度量,是由老托马斯·J·麦凯布(英语:ThomasJ.McCabe,Sr.)在1976年提出,用来表示程式的复杂度,其符号为VG或是M。
循环复杂度由程式的源代码中量测线性独立路径的个数。
此概念有些类似的量测文字复杂度的Flesch-Kincaid可读性测试
(英语:Flesch-KincaidReadabilityTest),不过方法不完全相同。
循环复杂度是由程式的控制流图(英语:controlflowgraph)来计算:
有向图的节点对应程式中个别的程式码,而若一个程式执行后会立刻执行另一程式码,会有边连结二程式码对应的节点。圈复杂度可应用在程式的子程序、模组、方法或类别。
麦凯布首先提出一种称为“基础路径测试”(BasisPathTesting)的软件测试方式,是测试程式中的每一线性独立路径,此情形的测试用例个数即为程式的循环复杂度。
"循环复杂度"的名称有时会让人误解,因为此复杂度不只计算程式中的循环个数。
循环复杂度是指程式的控制流图中,若将结束点到启始点再增加一个边时,控制流图中的圈(几个边形成封闭路径)的个数。
例如:
我们利用循环做一个累加器
package com.item.action; public class Main { public static void main(String args[]) { int i = 1;// 1、初始值 int sum=0; while(i<101) {//2、表达式 sum+=i;//3、循环体 i++;//4、迭代器 } System.out.println(sum); } }
这样会一直的累加到5050,一共执行了100次,一个循环,循环复杂度也就是1,但是我们通常用时间复杂度【O(n)】与空间复杂度【S(n)】来表示。