static void print(int i){
if( i > 1){
System.out.print("Y");
print(i-1);
}
for(int t = 0; t < i ; t++){
System.out.print(i);
}
}
此代码具有以下输出; YY122333,附印刷品(3);
但是,我不明白为什么。为什么函数从打印1开始呢?难道它首先通过if函数然后打印Y然后是一个实体2?
中号
答案 0 :(得分:2)
这是你的序列:
i = 3, call print(3-1)
i = 2, call print(2-1)
i = 1, don't call print as 1 > 1 == False
for (int t=0; t<1; t++) prints '1'
for (int t=0; t<2; t++) prints '2' two times
for (int t=0; t<3; t++) prints '3' three times
当代码看起来很奇怪时,在像Eclipse这样的IDE中使用调试器逐步执行代码总是有帮助的,并且观察变量会发生变化。
答案 1 :(得分:2)
你的algrothym是递归的。如果你遵循这个陈述的逻辑你有
static void print(int i){
if( i > 1){
System.out.print("Y");
print(i-1);
}
for(int t = 0; t < i ; t++){
System.out.print(i);
}
}
Call print(i==3)
i > 1 -> TRUE
Prints Y
Call print (i==2)
i > 1 -> TRUE
Prints Y
Call print (i==1)
i > 1 -> FALSE
t = 0, t < 1 -> true
print 0
t = 1, t < 1 -> false
return
t = 0, t < 2 -> true
print 0
t = 1, t < 2 -> true
print 1
t = 2, t < 2 -> false
return
t = 0, t < 3 ->
and so on.
希望这有帮助
答案 2 :(得分:1)
你创建了一种特殊类型的函数,称为递归函数,这意味着函数会自行调用。
因此,当您第一次调用它时(参数大于1,我猜你的情况是3),它会打印Y
然后再次调用print
函数作为参数i-1 (2)
因此,它再次出现在函数中,评估条件,并且,i>1
再次调用自身,并以1
为参数。
它再次进入内部,但这一次不同,第一个条件是假的,它会跳转到一次打印1
的for循环。
然后该函数恢复,调用函数将在我们离开的地方收回(你记得,它与2作为参数的功能相同)。所以它进入循环,打印2
两次并恢复......
...以函数3作为参数进行第一次调用。所以它进入循环并打印3
三次。
然后执行将恢复到第一个名为print
函数的任何函数
答案 3 :(得分:0)
不,代码有递归调用。该函数在函数体中调用自身:print(i-1)
答案 4 :(得分:0)
i > 1
时,它会调用自己,等待该方法完成(打印其他所有内容),然后继续。
答案 5 :(得分:0)
Iteration Step info Output
1 enter print function i==3
1 if (i>1) 3 > 1 == true
1 System.out.print("Y") Y
1 call print functin with i-1 i - 1 == 2
2 enter print function i==2
2 if (i>2) 2 > 1 == true
2 System.out.print("Y") YY
2 call print function with i-1 i - 1 == 1
3 enter print function i==1
3 if (i>1) 1 > 1 == false
3 for (t=0; t<i; t++) t==0; 0 < 1 == true
3 System.out.print(i) YY1
3 for (t=0; t<i; t++) t==1; 1 < 1 == false
3 end iteration
2 for (t=0; t<i; t++) t==0; 0 < 2 == true
2 System.out.print(i) YY12
2 for (t=0; t<i; t++) t==1; 1 < 2 == true
2 System.out.print(i) YY122
2 for (t=0; t<i; t++) t==2; 2 < 2 == false
2 end iteration
1 for (t=0; t<i; t++) t==0; 0 < 3 == true
1 System.out.print(i) YY1223
1 for (t=0; t<i; t++) t==1; 1<3 == true
1 System.out.print(i) YY12233
1 for (t=0; t<i; t++) t==2; 2<3 == true
1 System.out.print(i) YY122333
1 for (t=0; t<i; t++) t==3; 3<3 == false
1 end iteration