递归计算ln(n!)的java方法

Kha*_*mov 0 java algorithm math recursion

如何实现java方法来ln(n!)递归计算?

这是我的解决方案。我知道这是错误的,但这是迄今为止我想到的唯一解决方案。

double func(int n) {
   double result;
   if(n == 1)
     return 1;
   result = func(n-1) * n;
   return Math.log(result);
}
Run Code Online (Sandbox Code Playgroud)

这是函数返回的内容:

func(2) = 0.6931471805599453  (correct)
func(3) = 0.7320993680864453  (should be: 1.79175946922805500081)
func(4) = 1.0744553356380115  (should be: 3.17805383034794561964)
Run Code Online (Sandbox Code Playgroud)

tha*_*guy 5

需要注意的是ln(n*x) = ln(n) + ln(x)ln(1) = 0

double func(int n) {
   if(n==1)
     return 0;
   return func(n-1) + Math.log(n);
}
Run Code Online (Sandbox Code Playgroud)

  • 对于与阶乘有关的任何事情的递归解决方案很容易编码,但非常天真。 (2认同)