请写出count1和count2的结果,并说明理由。package test;public class Test {
int count=0;
public void testMet1(){
count++;
System.out.println("count1--> "+count);
testMet2(count);
}
public void testMet2(int count){
if(count<3){
testMet1();
}
System.out.println("count2--> "+count);
}
public static void main(String[] args) {
Test t = new Test();
t.testMet1();
}
}
int count=0;
public void testMet1(){
count++;
System.out.println("count1--> "+count);
testMet2(count);
}
public void testMet2(int count){
if(count<3){
testMet1();
}
System.out.println("count2--> "+count);
}
public static void main(String[] args) {
Test t = new Test();
t.testMet1();
}
}
testme2里面的count不是外面的那个,也不是testme1里面的那个。 public void testMet2(int c){
if(c<3){
testMet1();
}
System.out.println("count2--> "+c);
}
package test;public class Test {
int count1=0;
public void testMet1(){
count1++;
System.out.println("count1--> "+count1);
testMet2(count1);
}
public void testMet2(int count2){
if(count2<3){
testMet1();
}
System.out.println("count2--> "+count2);
}
public static void main(String[] args) {
Test t = new Test();
t.testMet1();
}
}
count1-->2
count1-->3
count2-->3
没测试,只是猜想...
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1为啥腻,不明白了。有答案知会一下[email protected]
count2--> 1这两个为什么打印出来了?
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1
count2--> 1这两个为什么打印出来了?testMet2被调用了3次
count==1时,System.out.println("count2--> "+count);还没执行便开始递归调用testMet1.count=2时同理.直到count==3时不再调用testMet1,count2--> 3打出.函数返回到testMet2(2),再到testMet2(1)
count1--> 1
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1
而不是:
count1--> 1
count1--> 2
count1--> 3
count2--> 1
count2--> 2
count2--> 3
呢?堆栈?
count2--> 1
count2--> 2
count2--> 3
要说出它们打印的过程?
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1这个原理很类似低归调的原理
打印后再转回到count2 = 1时 打印出count2-->1递归调用结束 退出是这意思不?
int count1=0;
public void testMet1(){
count1++;
System.out.println("count1--> "+count1);
testMet2(count1);
System.out.println("count3----> "+count1);
}
public void testMet2(int count2){
if(count2<3){
testMet1();
}
System.out.println("count2--> "+count2);
}
public static void main(String[] args) {
Test t = new Test();
t.testMet1();
}
}那count3是怎么回事
count1--> 1
count1--> 2
count1--> 3
count2--> 3
count2--> 2
count2--> 1
但是以为想的太简单,结果试了一下.晕~~~
1--1
1--2
1--3
2--3
2--2
2--1
因为 if 循环的执行过程是这样前程序体
if(1){
if(2){
if(3){
if(4){
if(...){}
}}}}
后程序体
(*这里的1、2、3、4跟本题没关系,仅仅是举粒子)结果2:
count1--> 1
count1--> 2
count1--> 3
count2--> 3
count3----> 3
count2--> 2
count3----> 3
count2--> 1
count3----> 3我只说一点大家就应该明白了
count2:是方法testMet1(),通过testMet2(count1);付值过来的
所以他随着循环而改变的
count3:大家看看传递过来的值吗? 他就是count1本身,所以当他显示的时候他已经是3了,不会再改变了
结果为
count1--> 1
count1--> 2
count1--> 3
count2--> 3
count3----> 3
count2--> 2
count3----> 3
count2--> 1
count3----> 3
count1 为1,2,3就不要我说了吧.然后到递归到testMet2(3)时,count2 为3.而为什么此时count3 也等于3呢,此时count的值因为前几次调用变成了3(count为类的成员变量).而count2那边的count与count3 里的count 是不一样的.count2那边可以想象成为一个副本而已.所以,在后几次递归时,count3的值它是始终不变的(等于类的成员变量的值).
test1: push(1),pop(1) 执行一次 栈空
test2: push(1) 未执行 栈值:1
打印结果: count1--> 1count=2时:
test1: push(2),pop(2) 执行一次
test2: push(2) 未执行 栈值:2,1
打印结果: count1--> 2count=3时:
test1: push(3),pop(3) 执行一次
test2: push(3),pop(3) 执行一次 栈值:2,1
打印结果: count1--> 3
打印结果: count2--> 3
此时,栈值为 2,1 (左边是栈顶),因为在count<3时,它test2一直没有得到执行的机会. 这时它继续执行,即pop(2): 打印结果: count2--> 2
pop(1): 打印结果: count2--> 1