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

Recursion 将递归函数转换为非递归函数,recursion,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

我只是想知道,有没有可能把这个递归函数转换成非递归函数

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);
}

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

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

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


然而,像这样首先生成树深度对于递归来说是一项完美的工作,因为它的读写更加直观,因此不容易出现错误。

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

但如果
RETURN
命令是递归函数中的最后一个命令,则必须使用stack和。否则,不需要使用from stack

祝你好运