-1

分析指出这个函数是一个性能下降器,因为递归潜得很深

Func(unsigned eff_id)
{



  if (eff_id == 0) return 1;

  if (eff_id == 1) return 0;

 XCodeRuleNode rn(m_IH_rn_ri.get_key(eff_id));   // Initialize 
  {
  rn.t_id = Func(rn.t_id);
  rn.f_id = Func(rn.f_id);
  //
  }

  return RegCodeRuleNode(rn);   // Inserting the object in a hash table
}
4

1 回答 1

4

只是为了回答您的问题:是的,它可以转换(另请参见Can each recursion are convert into iteration?)。

但是:递归本身(如果有的话,示例中没有显式递归)可能不是降级器,而是递归的深度,或者在“循环术语”中是迭代次数,所以只需用迭代替换递归可能无法解决您的问题,您可能不得不寻找其他解决方案(例如,记忆、查找表格、使用其他公式或算法,甚至可能是多线程;有太多可能的优化,无法在此处一一列举)。

旁注:您的评论似乎已过时,在 中return RegCodeRuleNode(rn); // Inserting the object in a hash table,我没有看到任何插入的内容

于 2012-11-27T11:54:28.733 回答