我会说实话,我不确定我在标题中使用的术语。
基本上我很想知道以下之类的区别:
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时,我感到很茫然)
此外,任何个人意见和/或偏好。作为完成工作的工具,我被教授递归,并希望听到专业(和业余)的意见。
关于递归结构/方法论的好读数也会受到赞赏,虽然这不是本网站的目的(更多的是我不会继续提出可能存在的愚蠢问题)
答案 0 :(得分:1)
除了在一种情况下调用静态方法,在另一种情况下调用实例方法之外,我认为两者之间没有任何区别。
就技术的递归而言,这没有区别。这似乎更多地是关于使用面向对象和程序编程(并且递归同样适用于两者)。
至于呼叫开销,在大多数系统上调用实例/虚拟方法可能会慢一些,因为必须进行调度,但这在宏观方案中并不重要。 (如果考虑方法调用的成本,您可能希望完全远离递归并将其展开到循环中。)