A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李栋梁 中级黑马   /  2012-11-20 12:37  /  1180 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李栋梁 于 2012-11-20 23:03 编辑

递归我知道是自己调用自己,但是一明白它是如何返回上一个方法调用的,还有就是,方法调用过程中内存是如何分配的?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

1 个回复

正序浏览
本帖最后由 崔维友 于 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指的是递归函数开始行。第一张图对应例一的代码,第二张图对应例二的代码。这两张图真难捕捉啊。

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马