public class Col

    public int cal(int i)
    {
        if (i>100){
            return 0;}
        return cal (++i)+i;    }
    public static void main(String[] argv)
    {
        Col cou=new Col();
        int i=0;
        System.out.println(cou.cal(i));  
    }
}这个程序运行得到得结果是 5151 ,为什么不是 0呢,,怎么理解
if (i>100){
            return 0;}
        return cal (++i)+i;
i>100不就 return o ;了吗

解决方案 »

  1.   

    这是个递归这样输出LZ应该看得清楚些
    public class Col 

        public int cal(int i) 
        { 
            if (i>100){ 
                return 0;} 
            System.out.println(i);
            //递归执行++i的操作和 cal (++i) 
         int j= cal (++i)+i; 
         //执行+i操作
         System.out.println(j+"---");
          return j;
        } 
        public static void main(String[] argv) 
        { 
            Col cou=new Col(); 
            int i=0; 
            System.out.println(cou.cal(i));  
        } 

    输出
    0--
    1--
    2--
    3--
    4--
    5--
    6--
    7--
    8--
    9--
    10--
    11--
    12--
    13--
    14--
    15--
    16--
    17--
    18--
    19--
    20--
    21--
    22--
    23--
    24--
    25--
    26--
    27--
    28--
    29--
    30--
    31--
    32--
    33--
    34--
    35--
    36--
    37--
    38--
    39--
    40--
    41--
    42--
    43--
    44--
    45--
    46--
    47--
    48--
    49--
    50--
    51--
    52--
    53--
    54--
    55--
    56--
    57--
    58--
    59--
    60--
    61--
    62--
    63--
    64--
    65--
    66--
    67--
    68--
    69--
    70--
    71--
    72--
    73--
    74--
    75--
    76--
    77--
    78--
    79--
    80--
    81--
    82--
    83--
    84--
    85--
    86--
    87--
    88--
    89--
    90--
    91--
    92--
    93--
    94--
    95--
    96--
    97--
    98--
    99--
    100--
    101---
    201---
    300---
    398---
    495---
    591---
    686---
    780---
    873---
    965---
    1056---
    1146---
    1235---
    1323---
    1410---
    1496---
    1581---
    1665---
    1748---
    1830---
    1911---
    1991---
    2070---
    2148---
    2225---
    2301---
    2376---
    2450---
    2523---
    2595---
    2666---
    2736---
    2805---
    2873---
    2940---
    3006---
    3071---
    3135---
    3198---
    3260---
    3321---
    3381---
    3440---
    3498---
    3555---
    3611---
    3666---
    3720---
    3773---
    3825---
    3876---
    3926---
    3975---
    4023---
    4070---
    4116---
    4161---
    4205---
    4248---
    4290---
    4331---
    4371---
    4410---
    4448---
    4485---
    4521---
    4556---
    4590---
    4623---
    4655---
    4686---
    4716---
    4745---
    4773---
    4800---
    4826---
    4851---
    4875---
    4898---
    4920---
    4941---
    4961---
    4980---
    4998---
    5015---
    5031---
    5046---
    5060---
    5073---
    5085---
    5096---
    5106---
    5115---
    5123---
    5130---
    5136---
    5141---
    5145---
    5148---
    5150---
    5151---
    5151
      

  2.   

    Lz这个问题有意思的!哈哈
    你可以这样测试
    当i=0 结果是5151
    当i=99 结果是201
    当i=100 结果是101  这个时候它就要+0了!
    当i=101 肯定是0其实就是递归加到101 上!
      

  3.   

    这个函数用FOR循环写让人看的更清楚
      

  4.   

    递归总是弄不太清楚,楼主慢慢想就知道了
    当101的时候,retrun 0;所以这句话就是return cal (++i)+i; //0+,此时是cal(101)+101=0+101所以retrun 101;
    当retrun 101之后,上一层的i是100就变成了cal(100)+100;//cal(100)刚才retrun 的是101,之后就成return 100+101;之后201继续往上return;就是retrun 201+99;
    以次类推最后就是从101一直加到0的运算;最后结果5151
      

  5.   

    我知道是递归,但是我是想不明白两个 return 怎么个走法 
     if (i>100){ 
                return 0;} 
            return cal (++i)+i; 
    当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151
      

  6.   

    最后一次返回的的确是 0
    但是以前已经有了好多 return ……
    当最好一次返回0时,是把这个返回值送回 return cal(101)+101 ,此时cal(101)=0
    结果继续向上传递!
      

  7.   


    1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程。效果就是1楼说的那样
      

  8.   

    public class Col 

        public int cal(int i) 
        { 
            if (i>100){ 
        System.out.println(i);
                return 0;} 
    System.out.print(i+"+");
            return cal (++i)+i;     } 
        public static void main(String[] argv) 
        { 
            Col cou=new Col(); 
            int i=0; 
            System.out.println(cou.cal(i));  
        } 

      

  9.   


    运行下面的代码 你就可以看明白了 
    public class Col 

        public int cal(int i) 
        { 
            if (i>100){ 
        System.out.println(i);
                return 0;} 
    System.out.print(i+"+");
            return cal(++i)+i;     } 
        public static void main(String[] argv) 
        { 
            Col cou=new Col(); 
            int i=0; 
            System.out.println(cou.cal(i));  
        } 

      

  10.   

    没看懂程序的意思罢了。
    当i<100的时候,就进行递归运算。
    当i>=100的时候,就直接返回0.递归的上限是100.
      

  11.   

     为什么1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程 ,,对return 机制不太熟敬请解析
      

  12.   

    你应该是对递归机制不太了解,而不是对return机制不太了解。