我写了一个方法来帮助构建一个四叉树。每个四叉树都有一个根节点,一个根节点有4个子节点。我正在使用深度递归来阻止此函数分割太多次。传入的深度等于正方形边的对数基数2(总是传入正方形)。但是,我从中得到了无限的递归。谁知道为什么?
当我运行它时,输出是“Depth = 0”无数次......
答案 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
的原始来电在哪里?我可以在构造函数中想象它。