// 程序进来后,上面这个判断需要循环10次,才能进入array[from];返回后进入下面语句判断
    int r = Math.max(array[from], max(array, from + 1));
    // 为什么这两个r这里会循环,并且from每次减1?
这里并不是循环,而是因为 max(array, from + 1)这里递归调用了max函数啊。

解决方案 »

  1.   

    你用DEBUG模式应该能看的很清楚,第一次判断a[9]为数组最后一位直接返回,第二次判断a[8]和a[9]最大值,第2次判断a[7]和第二次的结果的最大值,递归直到a[0]得到最终结果。
      

  2.   

    这里from每次都加1,等到9的时候返回return array[from];,我debug的时候,就看不出再调用上面的函数了,开始循环执行Math.max,并且from在减1,真是看不懂
      

  3.   

     int r = Math.max(array[0], m1 );//返回array[0]与之前的数m1比较大小
         m1=Math.max(array[1], m2 );
         m2=Math.max(array[2], m3 );
         ......
         m8=Math.max(array[8],m9 );返回array[8],m9 的大着,继续一层一层的比
           m9=Math.max(array[9],9);返回array[9]即 m9
      

  4.   

    你别想什么减1,就没什么值减过,max(,)执行了10次,因为递归,最先计算的是a[9],然后是a[8]和a[9],然后a[7]和前面结果。
      

  5.   

    停止条件:当前数后面没有其他数字,那么当前数就是最大的,对应
        if (from == array.length - 1) {
          return array[from];
        }
    递归过程:每次都把当前数和后面那些数里面最大的作比较,并返回较大的那个,对应
        int r = Math.max(array[from], max(array, from + 1));
        return r;
    递归函数max(int[] array, int from)含义:找出array中从from开始(包括from)到array最后的最大数如果碰到递归不懂的,尝试回答上面这三个问题,再看代码就明白了
      

  6.   


     //array[0]=11,max(array,1)=22 || 22
     //array[1]=22,max(array,2)=19 ||22
     //array[2]=3,max(array,3)=19  || 19
    //array[3]=4,max(array,4)=19  || 19
    //array[4]=15,max(array,5)=19  || 19
    //array[5]=16,max(array,6)=19 ||  19
    //array[6]=7,max(array,7)=19   ||  19
     //array[7]=8,max(array,8)=19  ||  19
    //array[8]=19,max(array,9)=10   ||   19
      

  7.   

    谢谢各位的回答,愚笨啊,呵呵,说实话还没太理解。
    刚才看了下教程,我现在从逻辑意义上理解,两数相比计较取大的,from,from+1这样比,碰到from=length-1就返回最后一个数和前一个数比较。