为何该流程图的圈复杂度(Cyclomatic complexity)为3而非2?
关于流程图圈复杂度为3的解释
首先明确圈复杂度的核心:它衡量的是流程图中独立路径的数量,独立路径的关键是「至少包含一条从未被其他路径使用过的边」,不是简单的表层分支数。
用三种常用方法验证圈复杂度为3的结论:
方法1:图论公式计算
圈复杂度的图论计算公式为:圈复杂度 = 节点数 - 边数 + 2。
假设对应流程图的结构是:
- 节点:开始、判断节点1、处理节点A、判断节点2、处理节点B、处理节点C、结束(共7个节点)
- 边:开始→判断1,判断1→处理A,处理A→结束,判断1→判断2,判断2→处理B,处理B→结束,判断2→处理C,处理C→结束(共8条边)
代入公式:7 - 8 + 2 = 3,结果为3。
方法2:决策节点计数法
圈复杂度 = 决策节点数量 + 1。这里的决策节点指所有能产生分支的判断框,每出现一个带分支的判断,就计为1个决策节点。如果流程图里有2个决策节点,那么2 + 1 = 3,正好对应圈复杂度3。
方法3:枚举独立路径
符合条件的流程图中,独立路径共有3条:
- 路径1:开始 → 判断1 → 处理A → 结束(用到「判断1→处理A」这条独有的边)
- 路径2:开始 → 判断1 → 判断2 → 处理B → 结束(用到「判断2→处理B」这条独有的边)
- 路径3:开始 → 判断1 → 判断2 → 处理C → 结束(用到「判断2→处理C」这条独有的边)
你之前误以为是2,大概率是把独立路径和表层分支数混淆了——只看到第一个判断的两个分支,没注意到第二个判断节点新增了一条独立路径,总独立路径数是3,因此圈复杂度为3。
内容的提问来源于stack exchange,提问作者victorli
相关产品推荐
相关产品推荐

