zl程序教程

您现在的位置是:首页 >  Java

当前栏目

循环复杂度

2023-02-18 16:31:30 时间

循环复杂度(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)】来表示。