如何编写一个接受2个int的递归置换方法

时间:2014-05-08 23:49:46

标签: java recursion int permutation

我需要编写一个执行n!/(n-r)!的方法。这在for循环中很容易做到,但我不能递归地解决它。到目前为止,这是我的代码。

public static int permut(int n, int r) {
    if (r == 0) {
        return 0;
    } else if (r==1){
        return n;
    } else {    
        return n * permut(n, r-1)/permut(n,r-1);
    }
}

我不知道如何设置回报。

1 个答案:

答案 0 :(得分:1)

基本上,您可以将此视为与普通阶乘相同,接受您递减nr每次递归,并在r == 1而不是n == 1时停止。

public static int permut(int n, int r){
    if(r == 1) return n;
    return n*permut(n-1, r-1);
}

因此,如果n = 10r = 3,您需要10!/(10-3)!10*9*8,该计划将提供:

n = 10, r = 3, val = 10
n = 9,  r = 2, val = 10*9
n = 8,  r = 1, val = 10*9*8