javascript - 如何将此递归函数转换为迭代函数?

标签 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. 它不使用递归?

最佳答案

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

如果你不分支,你只能在没有堆栈的情况下做纯迭代的事情。 IE。每尾只有一个递归调用。树有两个或更多,因此只能递归处理。

关于javascript - 如何将此递归函数转换为迭代函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528182/

相关文章:

javascript - Firebase - 从数据库数据生成表

c - Light C 数据结构和字符串库?

algorithm - 具有 O(1) 索引和 O(1) prev 和 next 的稀疏数组

algorithm - 无法理解算法的复杂性

C语言写模式的正确方法

c++ - 填充红黑树的最有效方法是什么?

如果数组超过 10 个项目,Javascript 按子数组中的值对数组进行排序

Javascript OnPageUnload - 在 "leave page"上必须调用附加方法

javascript - 如何使用 JQuery 修改输入的标签

algorithm - 可以使用什么算法找到最佳解决方案?