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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 麦者 中级黑马   /  2013-10-18 12:16  /  1363 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 麦者 于 2013-10-18 15:34 编辑

递归啊,就是函数本身掉用自己的,下面的代码返回的是5+4+3+2+1
  1. package com.test;
  2. public class Test {
  3.           public static void main(String arg[]){
  4.            System.out.println(Method(5));
  5.            }
  6.            public static int Method(int n){
  7.             if(n==1)//条件为递归出口
  8.                  return 1;
  9.                  else
  10.                    return n+Method(n-1);
  11.             }
  12.          }
复制代码
乍一看,貌似挺对的,但是根据java的面向对象的特性就疑惑了,那5之后是n-1,运算后跟5相加再返回,返回到哪里了,哪个对象接收么?还是这个函数本身接收?还是这就是一种格式?

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 Jim-剣◆﹏ 于 2013-10-18 12:36 编辑

关于递归的理解,最好是能够把图画出来,直观很多,文字挺难描述清楚,我尝试描述一下
Method(5)=5+Method(4)
Method(4)=4+Method(3)
Method(3)=3+Method(2)
Method(2)=2+Method(1)
Method(1)=1
然后你逐级向上返回,这就如同数学中的等价代换一样,画个图比较能深刻理解,不知道我有没有解决你的疑惑

或者你的疑惑是,Method(5)计算完毕之后,谁来接收这个值
其实这里计算完毕之后,也是一个对象JDK1.5之后,基本数据类型有了自动装箱,把基本数据类型看成一个对象,实际上是println()方法接收的
System.out.println(Object obj),输出的方法接收的就是一个对象,至于里面怎么操作这个对象向外打印,这里面封装起来了,只要知道,这里接收一个对象,能够把这个对象打印出来就欧了,学到后面IO就能够理解了

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
Jim-剣◆﹏ 发表于 2013-10-18 12:31
关于递归的理解,最好是能够把图画出来,直观很多,文字挺难描述清楚,我尝试描述一下
Method(5)=5+Method( ...

谢谢,你这么一说清楚多了
回复 使用道具 举报
哥们,其实是不断的调用Method方法,当达到结束递归条件时,运算返回表达式,然后返回表达式运算结果
与你一同进步!{:soso_e141:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马