黑马程序员技术交流社区

标题: 关于方法的递归 [打印本页]

作者: Oh.Ba    时间: 2015-4-27 23:33
标题: 关于方法的递归
class DiGui {
        public static void main(String[] args) {
                int sum = getSum(4);
               
                System.out.println("Sum="+sum);
        }
                public static int getSum(int n) {
                                if (n==1) {
                                        return 1;
                                }
                                int temp = getSum(n-1);
                                return temp+n;
                }
}
为什么它的结果为10??我看来看去都觉得这结果是无限在循环。。
谁能解释一下?????

捕获.PNG (12.46 KB, 下载次数: 15)

捕获.PNG

作者: Ray丶少年    时间: 2015-4-28 07:37
并没有啊,当n==1时就从后面开始返回了
作者: Oh.Ba    时间: 2015-4-28 20:59
Ray丶少年 发表于 2015-4-28 07:37
并没有啊,当n==1时就从后面开始返回了

为什么会返回?
作者: 耳东君    时间: 2015-4-28 21:38
因为每次调用方法的时候   都还没有执行到return语句,说明被调用的方法还没有执行完就又再次调用了方法,直到n==1 才开始执行return一级一级的往回返.每返回一次,之前被调用的方法才会被释放.
作者: Ray丶少年    时间: 2015-4-28 21:52
Oh.Ba 发表于 2015-4-28 20:59
为什么会返回?

这是画的图,你看下先

a.png (83.97 KB, 下载次数: 16)

图解

图解

作者: 晓声    时间: 2015-4-28 22:17
说白话点就是,return 1开始计算递归数列的和
作者: 依秋无泪    时间: 2015-4-28 22:35
如果不能理解,你可以先另n=1.理解下,n=2理解下,n=3理解下
作者: Oh.Ba    时间: 2015-4-29 21:08
依秋无泪 发表于 2015-4-28 22:35
如果不能理解,你可以先另n=1.理解下,n=2理解下,n=3理解下

就是return那里搞不懂
作者: Oh.Ba    时间: 2015-4-29 21:10
Ray丶少年 发表于 2015-4-28 21:52
这是画的图,你看下先

不懂return为什么会循环




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