黑马程序员技术交流社区

标题: 关于递归,疑问 [打印本页]

作者: 李栋梁    时间: 2012-11-20 12:37
标题: 关于递归,疑问
本帖最后由 李栋梁 于 2012-11-20 23:03 编辑

递归我知道是自己调用自己,但是一明白它是如何返回上一个方法调用的,还有就是,方法调用过程中内存是如何分配的?
作者: 崔维友    时间: 2012-11-20 14:32
本帖最后由 崔维友 于 2012-11-20 14:34 编辑
  1. //递归方法不使用同一个栈,每一次递归调用,都将创建新的栈
  2. /*
  3. //例一
  4. //在main方法中调用静态递归方法。静态的会加载到栈内存中。递归越多,占用内存越大,最终溢出。

  5. class Recursive
  6. {
  7.         static void rec ()
  8.         {
  9.                 System.out.println("递归");
  10.                 rec();
  11.         }

  12.         public static void main(String[] args)
  13.         {
  14.                 rec();
  15.         }
  16. }
  17. */

  18. //****************************************************

  19. /*
  20. //例二
  21. 非静态类中的递归,不断创建新的对象,最终致使内存溢出。
  22. */

  23. class Recursive
  24. {
  25.         static void rec ()
  26.         {
  27.                 Machine mh=new Machine();
  28.                 mh.recursive();
  29.         }

  30.         public static void main(String[] args)
  31.         {
  32.                 rec();
  33.         }
  34. }

  35. /*
  36. 方法的第二行 “ recursive(); ”省略了this关键字。
  37. */
  38. class Machine
  39. {
  40.         public void recursive()
  41.         {
  42.                 System.out.println("递归");
  43.                 this.recursive();
  44.         }
  45. }
复制代码
---------------------------------------------------------------------------


图片中下面的6和43指的是递归函数开始行。第一张图对应例一的代码,第二张图对应例二的代码。这两张图真难捕捉啊。

---------------------------------------------------------------------------
在下不才,见解甚微。请多指正!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2