2012-03-26 88 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