如何将这个递归函数转换为迭代函数?

时间:2013-12-11 19:25:20

标签: javascript algorithm data-structures recursion functional-programming

F = function(node){
    return typeof(node)!="object" ? 
               node
           : transformable([F(node[0]),F(node[1])]) ? 
               F(transform(F(node[0]),F(node[1]))) 
           : node;
};

此函数接收二叉树,例如[1,[[2,3],[4,5]]],并递归地应用一系列转换。有没有办法转换该功能,以便

  1. 相反,它会收到一个扁平的二叉树,例如[N,1,N,N,2,3,N,4,5];
  2. 它不使用递归?

1 个答案:

答案 0 :(得分:1)

这取决于你的意思迭代。如果你的意思是用循环来解决它,那么你可能需要一个回溯堆栈,几乎可以反映你在当前的递归实现中调用堆栈,所以在实践中它仍然是递归,只有不同的堆栈。

如果不进行分支,则只能在没有堆栈的情况下进行纯迭代。即每尾只有一个递归调用。树有两个或更多,所以它们只能递归处理。