我从昨天起就开始工作以使这个功能正常工作,但事实并非如此.我已经尝试了一切.我正在使用具有深度递归的函数.我得到的输出很奇怪:
Im going in with depth: 8
Depth in builder: 8
Depth in builder: 7
Depth in builder: 6
Depth in builder: 5
Depth in builder: 4
Depth in builder: 3
Depth in builder: 2
Depth in builder: 1
Depth in builder: 0
Depth in builder: 0
Depth in builder: 0
Depth in builder: 0
Depth in builder: 1
Depth in builder: 0
Depth in builder: 0
Depth in builder: 0
Depth in builder: 0
Depth in builder: 1
.....
Run Code Online (Sandbox Code Playgroud)
然后它永远在那些1和0之间交替.这怎么可能?如果深度为0,这条线甚至不应显示.为什么这只是继续前进?
如果您想知道,节点的构造函数不会再次调用构建器.构造函数不会调用任何外部函数,所以现在它从那里开始.
我不确定它是否会永远显示出来; 它可能会持续一段时间.
你的递归函数在每个级别进行四次递归调用,从深度8到深度为0.这意味着底部总共有4 8 = 65536个递归调用,深度为1时有7 7 = 16384个调用,等等.总共有87381次调用,如果每个调用打印出一行文本并进行内存分配,如果它持续很长时间,我就不会感到惊讶.此外,由于您正在使用BMP
by值,因此您在每次迭代时都会复制图像(除非它在内部执行某些操作),这会使整个过程进一步减慢.
至于为什么你会看到1 0 0 0 1 0 0 0
,我认为这是因为每次你在深度d展开一个节点,你将完全展开它的所有孩子,然后再回到d - 1级.这意味着当你第一次尝试在深度2展开一个节点,你将在第1级展开四个节点,每个节点打印出1 0 0 0,然后你将在深度2扩展该节点并继续深度为2的兄弟节点然后再打印出1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0.
简而言之,我不确定这是否是您的代码中的错误或只是大量的递归调用.