通过struct调用递归函数

时间:2016-07-12 10:23:59

标签: c++ recursion struct

首先来看看我的结构

 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的一个属性调用这个函数,有没有人知道我该怎么做?

更新 我的项目是实时的,时间对我来说非常重要,而且这个函数被循环调用大约一百万次

4 个答案:

答案 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"
        */
    }
}

显然取决于你在那里有什么代码,只是想提醒你这种可能性。