求一简单的阶乘算法C(n,m)

就是数学中的C(n,m),n为下标,m为上标。比如C(5,2)=5*4/2*1;又比如C(10,7)=C(10,3)=10*9*8/3*2*1;
最好效率高一点,代码要简洁。

天生愚钝,刚写的,看看合理不:
[code="java"]
public static int c(int a,int b){
if(b>a/2){
return c(a,a-b);
}
return up(a,b)/up(b,b);
}

public static int up(int a,int b){
    int c = 1;
    for(int i=0;i<b;i++){
        c = c*a;
        a--;
    }
    return c;
}

public static void main(String[] arg){
    System.out.println(c(10,2));
}

[/code]