2012-03-26 86 views
0

老實說,我不確定我在標題中使用的術語。遞歸和類實例遞歸的區別是什麼

基本上我很好奇,想知道喜歡的東西之間的區別:

class MyRecursiveClass 
{ 
public: 
    int myData; 
    MyRecursiveClass* nextInLine; 
    int myRecursiveFunction(int data) 
    { 
      data+=myData; 
      if(nextInLine == null) 
       return data; 
      else 
       return nextInLine->myRecursiveFunction(data); 

    } 
} 

int staticRecursiveFunction(MyRecursiveClass* target, int currentData) 
{ 
    if(target == null) 
     return currentData; 
    currentData+=target->myData; 
    staticRecursiveFunction(target->nextInLine, currentData); 
} 

int otherStaticRecursiveFunction(MyRecursiveClass* target) 
{ 
    if(target == null) 
     return 0; 
    return target->myData + otherStaticRecursiveFunction(target->nextInLine); 
} 

基本上我想要的是在頭頂上的差異,如以及兩種方法之間差異的更好條件(當我嘗試t時,我感到茫然o谷歌)

此外,任何個人意見和/或偏好。我被學習遞歸更多的工具來完成工作,並希望聽到專業(和業餘)的意見。

同樣在遞歸結構良好讀數/方法,將不勝感激,雖然這不是該網站的目的(更何況我也不繼續問潛在的愚蠢的問題)

回答

1

我看不出有什麼區別除了在一種情況下您調用靜態方法,另一種情況下是實例方法。

就技術的遞歸而言,這沒有什麼區別。這似乎更多地使用面向對象與過程編程(並且遞歸同樣適用於兩者)。

至於調用開銷,調用實例/虛擬方法在大多數系統上可能會稍微慢一些,因爲必須進行調度,但在事情的宏觀方案中這不是很重要。 (如果方法調用的成本是一個問題,那麼您可能希望徹底擺脫遞歸,並將其展開爲一個循環)。

+0

這是我的假設,但假設是所有人的母親......以及你知道俗話如何。我記得我的數據結構教師總是使用後一種方法,即使在處理樹/列表/哈希/排序等時。我曾經被迫使用一種方法或另一種方法的唯一時間是當我「需要」使用私有一類中的數據。我想知道是否還有其他情況比其他情況更適合個人喜好。 – 2012-03-26 05:29:49