为什么我的方法进入无限递归?

时间:2011-03-16 22:54:28

标签: c++

我写了一个方法来帮助构建一个四叉树。每个四叉树都有一个根节点,一个根节点有4个子节点。我正在使用深度递归来阻止此函数分割太多次。传入的深度等于正方形边的对数基数2(总是传入正方形)。但是,我从中得到了无限的递归。谁知道为什么?

当我运行它时,输出是“Depth = 0”无数次......

6 个答案:

答案 0 :(得分:1)

如果n->isLeaf()条件意味着“所有n的孩子都为空”,那么我想这里总是假的。

答案 1 :(得分:0)

无法查看深度检查的任何问题。你确定你通过了正确的深度到第一个电话?也许它不是无限的,只是太深了?

答案 2 :(得分:0)

我可能错了,但在第一次通话时显示深度。 如果它的值是NaN。你得到了答案。

答案 3 :(得分:0)

您对buildTreeHelper的递归调用的处理似乎完全正确。您在递归之前检查depth终止条件,并始终使用depth-1进行调用。

我能看到的唯一潜在问题是,是否是构造函数调用(创建子代的调用)再次调用buildTreeHelper。例如,如果构造函数始终使用buildTreeHelper的对象变量调用depth,那么这可能会导致无限递归(每次都会有相同或更大的值)。

答案 4 :(得分:0)

你可以在buildTreeHelper(...)中用第二个参数替换“QuadtreeNode *& n”和“QuadtreeNode * n”并检查结果吗???

答案 5 :(得分:0)

buildTreeHelper的原始来电在哪里?我可以在构造函数中想象它。