黑马程序员技术交流社区
标题:
递归中的疑惑
[打印本页]
作者:
麦者
时间:
2013-10-18 12:16
标题:
递归中的疑惑
本帖最后由 麦者 于 2013-10-18 15:34 编辑
递归啊,就是函数本身掉用自己的,下面的代码返回的是5+4+3+2+1
package com.test;
public class Test {
public static void main(String arg[]){
System.out.println(Method(5));
}
public static int Method(int n){
if(n==1)//条件为递归出口
return 1;
else
return n+Method(n-1);
}
}
复制代码
乍一看,貌似挺对的,但是根据java的面向对象的特性就疑惑了,那5之后是n-1,运算后跟5相加再返回,返回到哪里了,哪个对象接收么?还是这个函数本身接收?还是这就是一种格式?
作者:
Jim-剣◆﹏
时间:
2013-10-18 12:31
本帖最后由 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就能够理解了
作者:
麦者
时间:
2013-10-18 12:37
Jim-剣◆﹏ 发表于 2013-10-18 12:31
关于递归的理解,最好是能够把图画出来,直观很多,文字挺难描述清楚,我尝试描述一下
Method(5)=5+Method( ...
谢谢,你这么一说清楚多了
作者:
王松松
时间:
2013-10-18 12:40
哥们,其实是不断的调用Method方法,当达到结束递归条件时,运算返回表达式,然后返回表达式运算结果
与你一同进步!{:soso_e141:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2