Программа рекурсии NChooseR Java

#java #recursion

#java #рекурсия

Вопрос:

У меня возникла проблема с поиском значения «NChooseR», когда пользователь вводит два числа, и программа должна использовать рекурсию. Формула «NChooseR» должна быть n! / r!(n-r)!

 Scanner input = new Scanner(System.in);

    System.out.println("This program will calculate the number of ways to chose r different objects from a set of n objectsn");

    System.out.println("How many objects would you  like to chose? (r value)");
    int userR = input.nextInt();

    System.out.println("How many objects are there to chose from? (n value)");
    int userN = input.nextInt();

    System.out.println("There are "   nchooser(userN, userR)   " ways to chose "   userR   " objects from a set of "   userN   " objects");

}

public static long factorialn(int n) {
    //return a value of one for terms one and two
    if ((n == 1) || (n == 2)) {
        return 1;

    } else {
        return factorialn(n - 1)   factorialn(n - 2);
    }
}

public static long factorialr(int r) {
    //return a value of one for terms one and two
    if ((r == 1) || (r == 2)) {
        return 1;

    } else {
        return factorialr(r - 1)   factorialr(r - 2);
    }
}

    public static long factorialnr(int r, int n) {
    //return a value of one for terms one and two
    if ((r == 1) || (r == 2) || (n == 1) || (n == 2)) {
        return 1;

    } else {
        return factorialr((n-r) - 1)   factorialr((n - r) - 2);
    }
}

public static long nchooser(int r, int n) {


    return factorialn(n) / (factorialr(r) * (factorialnr(n,r)));
}
  

Комментарии:

1. Итак, с какой проблемой вы столкнулись? Отображается сообщение об ошибке? Неверный результат? Компьютер охвачен пламенем?

Ответ №1:

вот некоторый код, который может работать с большими числами:

 public static final long f(final int n) { // factorial
    long i,p;
    if(n<=1)
        p=1;
    else for(p=n,i=2;i<=n-1;i  )
        p=p*i;
    return (p);
}
public static final long c(final int n,final int r) { // binomial coefficient
    long i,p;
    if(r<0||n<0||r>n)
        p=0;
    else if(r==0)
        p=1;
    else if(r>n-r)
        p=c(n,n-r);
    else {
        for(p=1,i=n;i>=n-r 1;i--)
            p=p*i;
        p=p/f(r);
    }
    return p;
}