【发布时间】:2012-03-12 05:39:24
【问题描述】:
我正在用 JS 编写一个递归函数并且遇到了一些麻烦。让我们从这个非常基本的功能开始:
function traverse(thing)
{
if (typeof traverse.depth == 'undefined')
traverse.depth = 1;
else
traverse.depth ++;
if (thing.child)
traverse(thing.child);
}
所以这工作正常,depth 充当某种静态变量,但问题是在像 C 这样具有适当静态变量的语言中,当您退出函数时,这个变量会(表面上)减少,所以它是一个真正的深度。如果我有三个包含三个盒子的盒子,每个盒子都包含三个盒子,等等,我们基本上是钻到最深的一个,直到没有孩子,然后回退到兄弟的一个级别,并遍历它的孩子.上面代码的问题是深度不断增加和无限增加,即使从最老的祖先到最小的孩子,TRUTH 深度可能只有 3 或 4。如果每个级别有 80 个兄弟姐妹,那么深度计数器将会飙升。
如何跟踪 JS 递归函数的真实深度?
【问题讨论】:
-
在最后一个 if 条件之后减少 traverse.depth 怎么样?
-
首先,您没有显示任何减少
traverse.depth值的代码... -
我很抱歉投票以重复关闭 - 我链接到的那个似乎不适用于递归。
标签: javascript recursion