通过使用递归函数划分两个阶乘

时间:2018-02-07 16:48:56

标签: java recursion division factorial

我写了一个简单的递归函数来计算阶乘。但在我的问题中,我想做的是int result = n!/ k!。当我将结果更改为double而不是int时,我得到错误:线程“main”中的异常java.lang.StackOverflowError ,即使函数返回double,也不会返回正确的结果。例如,我有这个功能

 static int factorial(int n) {
    if (n == 0)
        return 1;
    else
        return (n * factorial(n-1));
}

我想做factorial(2)/ factorial(3)所以返回1/3

1 个答案:

答案 0 :(得分:0)

您的功能是正确的,您可能没有将int转换为double,这可能是问题所在。以下函数将递归地将较高的数字n乘以较低的数字k,其中n and k都是自然数

static int factorial(int n,int end){
    if(n == end){
        return end;
    }else{
        return n * factorial(n-1,end);
    }
}

如果您需要数字的阶乘,请将1传递给第二个参数。

此外,如果您不需要 n k 的阶乘,您可以优化代码。如您所知,6!除以4!后的结果将为6x5。因此,通过优化代码,我提出了以下解决方案。这将提供两个值numeratordenominator。你可以用更快的方式轻松地完成你想要的任务,而不是计算两个因子并再次分割它们。

if(n == k){
    numerator = 1;
    denominator = 1;
}else if(n > k){
    numerator = factorial(n,k+1);
    denominator = 1;
}else{
    numerator = 1;
    denominator = factorial(k,n+1);
}

我希望这会有所帮助。