作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个列表( [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++
时的输出.如您所见,直到
2
上的第二个列表,级别才发生变化。 level (引用第一个输出),然后在最后做一些古怪的东西。
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
lev + 1
不同于
++lev
和
lev++
因为它实际上并没有为 lev 赋值。我想知道的是当我分配
lev
时递归过程中发生了什么到一个新的值,以及为什么它对于 postcrement 和 precrement 不同。
最佳答案
在您的函数中定义了一个整数,称为 lev
默认情况下(在您的第一个函数调用中)lev
的值是 0
现在在函数的上下文中你调用一个函数(实际上是同一个函数,但这并不重要)。
当你这样称呼它时
func(lev+1)
lev+1
调用在函数返回
lev
的值之后在调用函数的上下文中保持不变。
func(lev++)
lev
调用在函数返回
lev
的值之后是
lev+1
在调用函数的上下文中。
++
-部分称为
后自增运算符 因为它会增加变量
的值之后 已调用电话
func(++lev)
lev+1
调用在函数返回
lev
的值之后是
lev+1
在调用函数的上下文中。
++
-部分称为
预增运算符 因为它会增加变量
的值之前 已调用电话
lev
在该上下文中使用。由于你使用递归,所以会有几个变量
lev
彼此相邻,每个都在自己的功能上下文中
关于recursion - 在递归期间为变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16389171/
根据 Android docs ,activity生命周期如下: onCreate() onStart() onResume() onPause() onStop() onDestroy() 问题是,
我有一门类(class)有很多专栏,但这个问题只需要其中三个: ---------------------------------------- | start_date | start_time
给定在同一个 Tomcat 6 上运行的两个 Web 应用程序。如果您从一个应用程序到另一个应用程序进行 http 调用,Tomcat 是否会“短路”此调用,或者它会在调用之前一直在 interweb
我是一名优秀的程序员,十分优秀!