1
yulanggong OP |
2
yulanggong OP |
3
yulanggong OP |
4
haohaolee 2012-09-28 15:36:17 +08:00
一个疑问,stackSize 真的能反映当前递归的深度吗?出函数的时候是不是要 stackSize-- 一下啊?
另外,为什么要选择这么难以理解的解决方式呢,如果不是非要使用递归的话,可以用一个数据结构模拟栈或者别的神马嘛,比如树的遍历 |
5
skyleft 2012-09-28 15:39:31 +08:00
使用全局变量
|
6
yulanggong OP @haohaolee
stackSize 的确是错的,因为 forEach 那会进入不同的分支。可以改为 stackSize 作为参数传给递归的函数用来分别统计。 你能说说用数据结构模拟栈的思路吗?我没什么编程基础。 |
7
chone 2012-09-28 15:54:37 +08:00
callback是不是要在所有遍历完成后调用,那样需要能逐级向上反馈完成的信号吧,这样在子级遍及没有完成前,父级需要被阻塞以等待信号。阻塞的实现好像也要用settimeout,父级和子级之间的通讯可以使用forEach的bind参数。
不过这样的处理又复杂,效率又差。@haohaolee 说的比较靠谱。 |
8
yulanggong OP |
9
haohaolee 2012-09-28 17:20:17 +08:00
@yulanggong 我觉得你可以参考树遍历的方式,应该有很多资料。
提供一个思路,设想有一个队列 q (javascript原生是否支持队列我不知道) 1. 把a数组放进队列 2 若队列不为空循环处理队列: 取出队列头的元素,遍历该数组,若元素仍为数组则加入队列尾,若为非数组则直接处理 |
10
skyleft 2012-09-28 17:32:38 +08:00
使用栈实现递归,类似树的非递归遍历,但是树的节点之间有指针链接,这里用两个栈。
初始化两个栈S1,S2(js无,自己实现),s1存下标,s2存数组 s1.push(0) s2.push(arr) while(s not empty){ i=s1.pop();arri=s2.pop(); 循环arri,如果是元素,就访问它,如果还是数组,就将其在父数组中的下标压入栈S1,将父数组压入栈S2 } |
11
shawiz 2012-09-28 17:41:35 +08:00
non-blocking 的 callback 可以用 jquery 的 deferred 来解决。
比如: <script src="https://gist.github.com/3798898.js"> </script> |
12
shawiz 2012-09-28 17:42:13 +08:00 1
|
14
shawiz 2012-09-29 14:43:23 +08:00 1
|