class在递归函数内实例化,C ++

时间:2014-08-11 23:29:08

标签: c++ class recursion instantiation

如果要以递归方式调用成员函数,首选哪一个?

案例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)是更好的选择。

你能告诉我哪种方法更好,为什么? 谢谢!

1 个答案:

答案 0 :(得分:2)

首先,问题是这两种方法是否合适。是吗?如果对象C维护的状态可以与递归到另一个递归级别不同,那么只有第一种方法可供您使用。在第二种方法中,每个嵌套的递归调用将破坏前一次调用在C中创建的状态,这当然是不可接受的。例如,递归的正向传递可能会在C中存储相同的数据,并期望数据在回溯阶段保持可用并且在相同的递归级别上保持不变。

其次,如果两种方法确实可用,即如果C没有任何特定于每个递归级别的状态,那么,当然,第二种方法更好。但是,使用全局对象仍然不是一个好主意。第二种方法的正确实现将在递归之前(和之外)创建C,并确保所有嵌套递归调用都可以访问相同的C对象。对象C仍然可以是调用代码所拥有的本地对象。对它的引用只是通过函数参数传递给递归调用。