我有这个代码...
public class BackHanded {
int state = 0;
BackHanded(int s) {
state = s;
}
public static void main(String... hi) {
BackHanded b1 = new BackHanded(1);
BackHanded b2 = new BackHanded(2);
System.out.println(b1.go(b1) + " " + b2.go(b2));
}
int go(BackHanded b) {
if (this.state == 2) {
b.state = 5;
go(this);
}
return ++this.state;
}
}
为什么语句
return ++this.state;
在第二个方法调用中在这里执行了两次?编辑:
我期望输出是26。但是我得到2 7。
最佳答案
该方法使用递归调用自身。自state != 2
以来,第一次调用不会发生递归,但是第二次调用满足条件this.state == 2
导致方法递归。
int go(BackHanded b) {
if (this.state == 2) {
b.state = 5;
go(this);
}
return ++this.state;
}
}
以这种方式执行此方法
b2.go(b2)
的第二次调用:对条件进行求值,由于
state ==2
我们进入了条件块。在条件块内,状态分配为5。
然后,该方法调用自身(递归)。
我们再次从条件开始,这次是
state != 2
,因此我们跳过了条件。该方法返回
++this.state
或6并完成对自身的调用。执行返回到第一次调用,该调用刚刚完成了条件块的执行,因此我们返回return语句
++this.state
或7。关于java - 无法理解此输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20678808/