可以从此函数中删除递归吗?

时间:2012-11-27 11:47:02

标签: c++ c recursion

分析已将此函数指向性能降级,因为递归潜深很深

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
}

1 个答案:

答案 0 :(得分:4)

回答你的问题:是的,它可以被转换(另见Can every recursion be converted into iteration?)。

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

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