如果要以递归方式调用成员函数,首选哪一个?
案例1)实例化C'' a'次。
void foo (int a) {
if (a==0) return;
Car C;
C.memberfunc(a);
...
foo(a-1);
}
案例2)实例化' C'一次,并在递归foo中使用其成员函数
Car C;
void foo (int a) {
if (a==0) return;
C.memberfunc(a);
...
foo(a-1);
}
更新:这里没有州。所以,根据Difference between declaring variables before or in loop?案例1)应该更好。但答案暗示案例2)是更好的选择。
你能告诉我哪种方法更好,为什么? 谢谢!
答案 0 :(得分:2)
首先,问题是这两种方法是否合适。是吗?如果对象C
维护的状态可以与递归到另一个递归级别不同,那么只有第一种方法可供您使用。在第二种方法中,每个嵌套的递归调用将破坏前一次调用在C
中创建的状态,这当然是不可接受的。例如,递归的正向传递可能会在C
中存储相同的数据,并期望数据在回溯阶段保持可用并且在相同的递归级别上保持不变。
其次,如果两种方法确实可用,即如果C
没有任何特定于每个递归级别的状态,那么,当然,第二种方法更好。但是,使用全局对象仍然不是一个好主意。第二种方法的正确实现将在递归之前(和之外)创建C
,并确保所有嵌套递归调用都可以访问相同的C
对象。对象C
仍然可以是调用代码所拥有的本地对象。对它的引用只是通过函数参数传递给递归调用。