2010-08-20 38 views
6

我目前沒有安裝任何測量循環碼複雜度的程序。但我想知道遞歸方法是否增加了複雜性?遞歸方法增加循環複雜度

例如

// just a simple C# example to recursively find an int[] 
// within a pile of string[] 
private int[] extractInts(string[] s) 
{ 
    foreach (string s1 in s) 
    { 
     if (s1.ints.length < 0) 
     { 
      extractInts(s1); 
     } 
     else 
     { 
      return ints; 
     } 
    } 
} 

謝謝。

+1

代碼中的原始'int []'在哪裏? – strager 2010-08-20 05:58:23

+1

_Cymatic複雜性取決於代碼中獨立路徑的數量。粗略翻譯尋找分支。遞歸不需要暗示多個控制路徑。我猜測,遞歸和高圈複雜度之間不一定是一致的。 – dirkgently 2010-08-20 06:12:56

回答

4

據我瞭解,沒有。在你的例子中,遞歸方法只有一條線性獨立的路徑,所以它不會增加圈複雜度。

1
  1. 循環會增加圈複雜度。
  2. 循環通常可以使用遞歸加上保護條件來重寫。

即使遞歸調用本身不會嚴格計算爲增量,守護條件也會如此。這使循環和遞歸+警衛平等。