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

C++ 为什么我的方法会进入无限递归?,c++,C++,我已经编写了一个方法来帮助构建四叉树。每个四叉树有一个根节点,根节点有4个子节点。我使用深度递归来阻止这个函数划分太多次。通过的深度等于正方形侧面的圆木底2(始终通过正方形)。然而,我从中得到无限递归。有人知道为什么吗 当我运行它时,输出是“Depth=0”无数次。看不到深度检查有任何问题。你确定第一次通话的深度正确吗?也许它不是无限的,只是太深了?我可能错了,但在第一次调用时显示深度。 如果其值为NaN。您得到了答案。您对buildTreeHelper递归调用的处理似乎完全正确。在递归之前检查

我已经编写了一个方法来帮助构建四叉树。每个四叉树有一个根节点,根节点有4个子节点。我使用深度递归来阻止这个函数划分太多次。通过的深度等于正方形侧面的圆木底2(始终通过正方形)。然而,我从中得到无限递归。有人知道为什么吗


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

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

我可能错了,但在第一次调用时显示深度。
如果其值为NaN。您得到了答案。

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



我能看到的唯一潜在问题是构造函数调用(创建子类的调用)是否再次调用
buildTreeHelper
。例如,如果构造函数总是使用
depth
的对象变量调用
buildTreeHelper
(每次的值都相同或更大)。

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

你能用“QuadtreeNode*n”替换buildTreeHelper(…)中的第二个参数“QuadtreeNode*n”并检查结果吗???

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

您是否尝试过使用调试器单步执行它?您确定它是无限递归的,而不仅仅是耗尽堆栈吗?
深度的值到底是多少?即使是一个相对较小的值也会导致递归调用的指数数量(
4^depth
)。在四叉树中的buildTreeHelper方法中,是否可以用“QuadtreeNode*&n”替换“QuadtreeNode*n”对于第二个参数并检查结果??如果没有代码,我们如何理解这个问题?无限递归->所有地狱破裂lool好吧,如果深度==0,我放一条cout行,这样它就输出了深度。它只是无限地输出depth=0。无限地,或仅4^n次(其中n是原始深度)?您是否尝试过使用较小的深度值,例如
depth=1
depth=2
?现在我尝试了。我有一个seg故障错误。我的复制构造函数有问题。让我把它贴出来。看起来有点怪吗?在
int
中?这将是令人印象深刻的:-)根据您的编辑,我认为这不是解决方案。但是如果深度值是Nan(不是一个数字),那么(如果同时Nan对于int是不被禁止的。它只是从来没有被实现过:事实上我刚刚意识到我的节点复制构造函数有点古怪。让我发布它,看看它是否是okYes,这就是它的意思。为什么呢?因为你给孩子们分配了上面几行。:)但最终它会停止,当它停止时,最后一个节点将最终成为叶节点这里将是叶节点,但您不会初始化它们的
n->元素
,因为为它们调用的
buildTreeHelper
将立即
返回
深度,即使深度=1或2??你的意思是对的??