所以我有一个列表[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一个新值时递归过程中发生了什么,以及为什么它对于后置和前置是不同的。