首先来看看我的结构
typedef struct {
int treeDepth;
unsigned __int8 dmv[19];
unsigned __int8 dv[19];
unsigned __int8 ih;
bool flagLeft = true ;
bool flagRight = true;
}problem_t;
我有一个适用于此结构的函数,
void PMSprune(problem_t &problem)
{
/*
--blocks of code!
--modify properties of "problem"
*/
PMSprune(problem);// I want to call it with problem.treeDepth++, but I
//don't want my original struct to be modified
}
但是这个函数是递归的,我想用修改过的struct的一个属性调用这个函数,有没有人知道我该怎么做?
更新 我的项目是实时的,时间对我来说非常重要,而且这个函数被循环调用大约一百万次
答案 0 :(得分:2)
拆分功能:
void PMSpruneRec(problem_t &problem, int treeDepth)
{
/*
--blocks of code!
--modify properties of "problem"
*/
PMSpruneRec(problem, treeDepth + 1);
}
void PMSprune(problem_t &problem)
{
PMSpruneRec(problem, problem.treeDepth);
}
当然,您仍然需要一些终止条件。
答案 1 :(得分:0)
只需在更改之前复制它:
void PMSprune(problem_t &problem)
{
/*
--blocks of code!
*/
problem_t new_problem = problem
/*
--modify properties of "new_problem"
*/
PMSprune(new_problem);
}
答案 2 :(得分:0)
如果某个设计的treeDepth
应该是problem_t
成员,则可以在每次递归调用后重置其值:
void PMSprune(problem_t &problem)
{
/*
--blocks of code!
--modify properties of "problem"
*/
++problem.treeDepth;
PMSprune(problem);// I want to call it with problem.treeDepth++, but I
//don't want my original struct to be modified
--problem.treeDepth;
}
否则塞巴斯蒂安的做法会更好。它更清晰,更有条理。
答案 3 :(得分:0)
您是否考虑过将其变成循环?它甚至可以帮助提高性能,因为它是一个紧密循环内的嵌套调用。
void PMSprune(problem_t &problem)
{
for(int treeDepth = problem.treeDepth; someStoppingCondition; ++treeDepth)
{
/*
--blocks of code!
--modify properties of "problem"
*/
}
}
显然取决于你在那里有什么代码,只是想提醒你这种可能性。