请逐步解释递归;
public class TestClass {
private static void printit(int i) {
if (i == 1) {
return;
}
System.out.println(i);
printit(i / 2);
printit(i / 2);
}
public static void main(String args[]) {
int i = 8;
printit(i);
}
}
如果您使用 IDE,则只需使用调试器即可亲眼目睹一步一步发生的情况。
不管怎样,让我们尝试一下当我们调用递归方法时会发生什么:
您可以使用 8 (printit(8);
):
-
System.out.println(8);
-> 8
-
printit(8 /2 );
-> 再次调用方法,8/2=4
-
System.out.println(4);
-> 4
-
printit(4 /2 );
> 再次调用方法,4/2=2
-
System.out.println(2);
-> 2
-
printit(2 /2 );
> 再次调用方法,2/2=1
-
return;
-> 继续之前的调用,(printit(4 /2);
)
-
printit(2 /2 );
> 再次调用方法,2/2=1
-
return;
-> 继续之前的调用,(printit(4 /2);
)
- 方法结束,继续之前的调用(
printit(8 /2);
)
-
printit(4 /2 );
> 再次调用方法,4/2=2
-
System.out.println(2);
-> 2
- calls
printit(2/2);
我们已经知道这不会产生任何结果。
- 现在我们再次进入第一个通话,
printit(8);
, 呼吁printit(8/2);
-
System.out.println(4);
-> 4
- 16 等...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)