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]]]
并递归地应用一系列转换。有没有办法转换那个函数,这样
- 相反,它接收一个扁平的二叉树,例如
[N,1,N,N,2,3,N,4,5]
; - 它不使用递归?
最佳答案
这取决于你所说的迭代是什么意思。如果你的意思是用循环解决它,那是可能的,但你需要一个回溯堆栈,它几乎可以反射(reflect)你在当前递归实现中调用堆栈,所以在实践中它仍然是递归,只是堆栈不同。
如果你不分支,你只能在没有堆栈的情况下做纯迭代的事情。 IE。每尾只有一个递归调用。树有两个或更多,因此只能递归处理。
关于javascript - 如何将此递归函数转换为迭代函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528182/