Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写接受2个整数的递归置换方法_Java_Recursion_Int_Permutation - Fatal编程技术网

Java 如何编写接受2个整数的递归置换方法

Java 如何编写接受2个整数的递归置换方法,java,recursion,int,permutation,Java,Recursion,Int,Permutation,我需要写一个不需要n/(右)!。这在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); } } 我不知道如

我需要写一个不需要n/(右)!。这在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);
    }
}

我不知道如何设置返回。

基本上,你可以将其视为一个正常的阶乘,接受递减
n
r
每个递归,并在
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=10
r=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

您需要了解如何在至少一个参数较小(
n-1
r-1
)的情况下调用
permut
。这需要一些数学思考。如果你有permut(n,r-1)或permut(n-1,r)[作为一个例子],你怎么能从中得到结果呢?我想我会减少r,因为这基本上就是它所做的迭代量。非常感谢。我不知道如何让它运行r次,但现在减少r直到达到1是有意义的。