public class Hello {
public static void main (String args []) {
int num = 100;
System.out.println(sum(num)) ;
}
public static int sum(int data ) {
if (data >1){
return data + sum(data - 1) ;
}
System.out.println(data) ;
return data ;
}
}
输出的结果是
1
5050
为什么是这样呢?返回的到底是哪个值?即return到底在这个代码里面是怎么操作的?

解决方案 »

  1.   

    谁先执行返回谁,你这是一个递归调用,每层sum的调用都返回 if里面的内容,直到传递的data为1,然后所有的函数调用返回,汇总结果。
      

  2.   

    你这是递归调用了sum方法,出口是data==1,在data==1的时候,执行了if外面的语句,后面都是执行if里面的语句。
    这应该是求1至100的和
      

  3.   

    if() {
                return
            }
            return
    if() {
                return
            } else {
                return
            }
    这两个效果是一样的,因为return会提前结束方法
      

  4.   

    递归来着,if里面的return执行了99次,if外面的return执行了一次。
      

  5.   

    满足if条件就返回if里的return,否则返回if外的return
    你可以自己简单跟踪一下代码
    传100进入,也就是data=100,满足if,所以返回if的return,但if的return有递归调用sum(99)
    然后sum里的data=99,又进入if,又返回if的return,又因为还有递归,继续调用sum(98)
    等等等等,一次类推,知道sum(1),data=1,不满足if才返回if外的return