请逐步解释递归
请逐步解释递归;
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 - 叫
printit(2/2);
我们已经知道什么都没有结果。 - 现在我们再次打电话给
printit(8);
,要求printit(8/2);
-
System.out.println(4);
– > 4 - 16等…