-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

あなたの質問に答えるだけです:はい、変換できます(すべての再帰を反復に変換できますか?も参照してください)。

ただし、再帰自体(例に明示的な再帰がない場合)はおそらく劣化ではなく、再帰の深さ、または「ループ用語」の反復回数であるため、再帰を反復に置き換えるだけですおそらく問題を解決できず、おそらく他の解決策を探す必要があります (たとえば、メモ化、ルックアップ テーブル、他の数式またはアルゴリズムの使用、おそらくマルチスレッドでさえあります。考えられる最適化が多すぎて、ここですべてを挙げることはできません)。

補足: あなたのコメントは古くなっているようですreturn RegCodeRuleNode(rn); // Inserting the object in a hash table

于 2012-11-27T11:54:28.733 に答える