所以我有一个列表[123,487693821,1234,[111,222,[10,20],[11,45],34,21],333,[67,67],546]
(
0 123
0 487693821
0 1234
1 111
1 222
2 10
2 20
2 11
2 45
1 34
1 21
0 333
1 67
1 67
0 546
执行此操作的代码是:
listPrinter(list,[lev=0,ind=''])
{
for(var e in list)
{
if(e is List) listPrinter(e,lev+1,ind+'\t');
else print('$lev $ind$e');
}
}
我的问题是,当我更改lev+1
为lev++
, 或++lev
. 我有每个场景的输出,我将在下面发布,但我不知道为什么我会得到我所做的输出。我不知道如何跟踪递归调用中发生的事情。请注意,我唯一更改的是lev
,因此在下面的输出中缩进仍然正确。
'lev + 1' 更改为 时的输出lev++
。正如您所看到的,直到关卡上的第二个列表(参考第一个输出)之前关卡都不会改变2
,然后在最后做一些古怪的东西。
0 123
0 487693821
0 1234
0 111
0 222
0 10
0 20
1 11
1 45
2 34
2 21
1 333
1 67
1 67
2 546
lev + 1
更改为时输出++lev
。这种方法是正确的,直到它到达2
关卡中的第二个列表(再次参考我发布的第一个输出),然后它开始做一些我无法理解的疯狂事情。
0 123
0 487693821
0 1234
1 111
1 222
2 10
2 20
3 11
3 45
3 34
3 21
1 333
2 67
2 67
2 546
我知道这很复杂,但实际上它只是归结为在递归、postcrements 和 precrements 中分配变量时会发生什么。它所用的语言是 dart,但如果这样更容易的话,我可能可以用 python 或 java 来编写它。谢谢。
澄清:我知道这与它lev + 1
的不同之++lev
处lev++
在于它实际上并没有为 lev 赋值。我想知道的是当我分配lev
一个新值时递归过程中发生了什么,以及为什么它对于后置和前置是不同的。