2011-09-03 90 views
0

方法12個最大公約數方法哪個更好?在好的做法和編碼風格

int gcd(int m, int n) 
    { 
      if (n==0) 
      return m; 
      else 
       return gcd(n,m%n); 
     } 

    int GetGCD(int m,int n) 
     { 
      if (m>n) 
       return gcd(m,n); 
      else 
       return gcd(n,m); 

然後調用GetGCD(m,n)的條款;

方法2

GetGCD(int n,int m) 
     { 
       if(m<=n && n%m == 0) 
      return m; 
      if(n < m) 
      return GetGCD(m,n); 
      else 
      return GetGCD(m,n%m); 
     } 

接近1背後的想法是,爲了保持遞歸方法儘可能地簡單,通過將額外的限制的參數(輸入)。

+0

我忘了提及,也許方法1運行得更快,因爲'M> N'檢查只執行一次,而不是在方法2中的每次遞歸中評估。 – colinfang

+0

有一個堆棧交換站點用於代碼評論:http:/ /codereview.stackexchange.com/ –

回答

0

我認爲第二種方法比第一種更好,因爲它更簡潔。

此外,它可以寫成沒有其他部分,如下所示。

GetGCD(int n,int m) 
{ 
    if(m<=n && n%m == 0) 
     return m; 
    if(n < m) 
     return GetGCD(m,n); 
    return GetGCD(m,n%m); 
} 
+0

聽起來真的,如果我沒有在第一時間使用'else',我應該保持風格(不要在第二位使用,要麼) – colinfang

0

在這兩種情況下最好的編碼風格2遵循是將您的變量重命名爲適當的名稱。這兩個代碼的休息都很好。最重要的是,第二個代碼仍然看起來很清晰,有1種方法。所以我會避免使用2種方法,除非第一個代碼中的GetGCD(m,n)做了一些額外的事情。

0

很好,因爲在我看來,它使代碼更容易閱讀和理解,我會選擇第一個。無論如何,我會稍微修改它:

private int InternalGCD(int m, int n) 
{ 
    return n == 0 ? m : InternalGCD(n, m % n); 
} 

public int ComputeGCD(int m,int n) 
{ 
    return m > n ? InternalGCD(m, n) : InternalGCD(n, m); 
} 

最後,它只是一個你喜歡哪種風格(假設性能不關心你)的問題。如果你認爲前者比後者更好,那就去使用它。

+0

是的,性能是可以忽略不計。說實話,我不喜歡三元運營商。我只有在必須時才使用它。 – colinfang