什么是递归和类实例递归之间的区别

时间:2012-03-26 03:35:27

标签: recursion computer-science

我会说实话,我不确定我在标题中使用的术语。

基本上我很想知道以下之类的区别:

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);
}

基本上我想要的是开销的差异,以及两种方法之间差异的更好条款(当我尝试使用Google时,我感到很茫然)

此外,任何个人意见和/或偏好。作为完成工作的工具,我被教授递归,并希望听到专业(和业余)的意见。

关于递归结构/方法论的好读数也会受到赞赏,虽然这不是本网站的目的(更多的是我不会继续提出可能存在的愚蠢问题)

1 个答案:

答案 0 :(得分:1)

除了在一种情况下调用静态方法,在另一种情况下调用实例方法之外,我认为两者之间没有任何区别。

就技术的递归而言,这没有区别。这似乎更多地是关于使用面向对象和程序编程(并且递归同样适用于两者)。

至于呼叫开销,在大多数系统上调用实例/虚拟方法可能会慢一些,因为必须进行调度,但这在宏观方案中并不重要。 (如果考虑方法调用的成本,您可能希望完全远离递归并将其展开到循环中。)