将递归函数转换为非递归函数

时间:2010-01-22 05:34:46

标签: recursion

我只是想知道,是否可以将此递归函数转换为非递归函数

unsigned Parser::Not(unsigned eff)
{
  if (eff == 0) return 1;

  if (eff == 1) return 0;

  Node rn(ri.get_key(eff));

  rn.t_branch_id = Not(rn.t_branch_id);
  rn.f_branch_id = Not(rn.f_branch_id);

  return CodeRuleNode(rn);
}

4 个答案:

答案 0 :(得分:8)

是。您可以通过实现自己的堆栈来跟踪状态,从而将任何递归函数转换为非递归函数。

答案 1 :(得分:1)

有可能,是的。但是,如果没有Node类中的父引用,那将很困难,并且需要一个当前节点的向量(模拟堆栈)。如果您可以更改Node类以包含对父类的引用,这将使迭代更容易,因为模拟堆栈隐含在树定义中。

然而,像这样生成树深度是一个完美的递归工作,因为它更易于读写,因此不易出错。

答案 2 :(得分:0)

任何递归函数都可以非递归方式编写。但是,您需要使用堆栈或其他数据结构来跟踪您访问过的节点。

答案 3 :(得分:0)

是的,我认为这是可能的。任何递归函数都可以转换为非递归函数。

但如果RETURN命令是递归函数中的最后一个命令,则必须使用堆栈,否则无需使用堆栈。

祝你好运!