basic recursion problem - code needs to be modified
I need help fixing this! I just keep getting a million errors urgh
Code :
/* The formula for computing the number of ways of choosing r different things from a set of n things is the
following: C(n, r) = n! / (r! * (n-r)!)
Write a recursive program (name the class that contains the main method Activity2) that executes C(n,
r) three times and prints the results. Your execution should use the (n, r) pairs as follows: (2, 4), (5, 3), and
(24, 12). Hard-code these values and calls to the recursive method into your program. (Do not prompt the
user to enter them.)
Note that you will need to devise and program a recursive method that calculates the factorial of a value. In
the event any of the pairs perform a calculation that throws any exception, catch the exception, print a
suitable informative message and continue processing. */
import java.math.BigInteger;
public class Activity2 {
public static void main(String[] args) {
try
{
int n=2;
int r=4;
System.out.print("C("+n+","+r+"): ");
int fn=factorial(n);
int fr=factorial(r);
int fnr=factorial(n-r);
int ncr=fn/(fr*fnr);
System.out.println(ncr);
}
catch (Exception e) {}
}
static int factorial(int n){
if (n==0)
return 1;
else
return(n*factorial(n-1));
}
}
Re: basic recursion problem - code needs to be modified
Please post the the first errors that appear :)
Re: basic recursion problem - code needs to be modified
I think i found what is the problem.You are likely to get a stackOverFlowError.Why?
Because of a call of factorial with a negative number.Here is the call
Code :
int fnr=factorial(n-r);//n-r=4-2=-2
So go to function factorial and see what happens
Code :
static int factorial(int n){
if (n==0)//that's when the recursion is going to stop
return 1;
else
return(n*factorial(n-1));
}
n must reach value 0 in order the recursion to stop.However when n is negative,then the recursion is going to be made by n decremented by one.So in your case,you have -2 then you call factorial with n-1=-2-1=-3 and so on.So n never reaches value zero.As a result the recursion is infinite <-that's bad :P
As you know factorial for negative ints can not stand logic.If you want to expand to negative(non-int) numbers there is the γάμα (gamma) function.
See at this link for more:
http://answers.yahoo.com/question/in...5190020AAZs7E5