public class SubClass { 
private int res = 1; public int sub(int a[], int len) { 
if (len == 0) { 
res = a[0]; 
} else { 
sub(a, len - 1); 
res = res * a[len - 1]; 

return res; 
} public static void main(String args[]) { 
int a[] = { 1, 2, 3, 8 }; 
System.out.println(new SubClass().sub(a, a.length)); } 
}
执行结果为什么不是1 ,而是48.。谢谢大侠了。。

解决方案 »

  1.   

    我跑了一下执行线索是先执行else ,再执行if  ,后来又执行 else 中res = res * a[len - 1];  
     不知道为什么,请大家指点
      

  2.   

    sub(a, a.length);   这个时间len = a.length != 0, 条件不成立,当然else了
      

  3.   

    进栈几层后出栈就要出几层。  你的代码每次出栈都执行res = res * a[len - 1]; 然后返回,结果自然就是个迭乘了。 
      

  4.   

    res=1*8
    res=1*8*3
    res=1*8*3*2
      

  5.   

    a[0]*a[0]*a[1]*a[2]*a[3]=48[code=Java]public class Recursion {
    private int res = 2; public int sub(int a[], int len) {
    System.out.println("Number is "+len); //print len;
    if (len == 0) {
    res = a[0];
    System.out.print("if ");
    } else {
    sub(a, len - 1);
    System.out.print("else " + a[len - 1] + ",  ");
    res = res * a[len - 1];
    }
    System.out.println("res=" + res + ", "); //print result;
    return res;
    } public static void main(String args[]) {
    int a[] = { 3, 5, 7, 11 };
    System.out.println(new Recursion().sub(a, a.length)); //print final result }
    }[code]
    ----------------------------------------------------------
    Number is 4
    Number is 3
    Number is 2
    Number is 1
    Number is 0
    if res=3, 
    else 3,  res=9, 
    else 5,  res=45, 
    else 7,  res=315, 
    else 11,  res=3465, 
    34653465=3*3*5*7*11