递归和类实例递归的区别是什么
问题描述:
老实说,我不确定我在标题中使用的术语。递归和类实例递归的区别是什么
基本上我很好奇,想知道喜欢的东西之间的区别:
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谷歌)
此外,任何个人意见和/或偏好。我被学习递归更多的工具来完成工作,并希望听到专业(和业余)的意见。
同样在递归结构良好读数/方法,将不胜感激,虽然这不是该网站的目的(更何况我也不继续问潜在的愚蠢的问题)
答
我看不出有什么区别除了在一种情况下您调用静态方法,另一种情况下是实例方法。
就技术的递归而言,这没有什么区别。这似乎更多地使用面向对象与过程编程(并且递归同样适用于两者)。
至于调用开销,调用实例/虚拟方法在大多数系统上可能会稍微慢一些,因为必须进行调度,但在事情的宏观方案中这不是很重要。 (如果方法调用的成本是一个问题,那么您可能希望彻底摆脱递归,并将其展开为一个循环)。
这是我的假设,但假设是所有人的母亲......以及你知道俗话如何。我记得我的数据结构教师总是使用后一种方法,即使在处理树/列表/哈希/排序等时。我曾经*使用一种方法或另一种方法的唯一时间是当我“需要”使用私有一类中的数据。我想知道是否还有其他情况比其他情况更适合个人喜好。 – 2012-03-26 05:29:49