请逐步解释递归

请逐步解释递归;

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); ):

  1. System.out.println(8); – > 8
  2. printit(8 /2 ); – >再次调用方法,8/2 = 4
  3. System.out.println(4); – > 4
  4. printit(4 /2 ); >再次使用4/2 = 2调用方法
  5. System.out.println(2); – > 2
  6. printit(2 /2 ); >再次使用2/2 = 1调用方法
  7. return; – >继续之前的通话,( printit(4 /2);
  8. printit(2 /2 ); >再次使用2/2 = 1调用方法
  9. return; – >继续之前的通话,( printit(4 /2);
  10. 方法完成,继续前一个调用( printit(8 /2);
  11. printit(4 /2 ); >再次使用4/2 = 2调用方法
  12. System.out.println(2); – > 2
  13. printit(2/2); 我们已经知道什么都没有结果。
  14. 现在我们再次打电话给printit(8); ,要求printit(8/2);
  15. System.out.println(4); – > 4
  16. 16等…