如何用递归计算Loga(n) java或者python

如何在java或者python中不用math库而用递归写出精确度高的计算loga(n)的方法?
以a为底

def recursivelog(n, x, b, l=None, u=None):
assert( n >= 0)
assert( x >= 1)
assert( isinstance(b, int) )
assert( b >= 2 )
float(x)
if(x<b):
return 0
else:
return 1+ recursivelog(n-1,x/b,b)
我自己的程序精度太差而且返回的都是整数

3个回答

另外推导的:
public static double loga1(int level, double a, double n) {
if (a <= 0 || n <= 0)
return Double.NaN;
if (level > 500)
return 1;
if (a == 1) {
return Double.NaN;
} else if (a > 1) {
if (n > a) {
return 1 + loga1(level + 1, a, n/a);
} else if (n == a) {
return 1;
} else { //n < a
return 1 / loga1(level + 1, n, a);
}
} else { //a < 1
return -loga1(level + 1, 1/a, n);
}
}

随便找一个程序

 double MYLOG(double a)  
{  
   int N = 15;//我们取了前15+1项来估算  
   int k,nk;  
   double x,xx,y;  
   x = (a-1)/(a+1);  
   xx = x*x;  
   nk = 2*N+1;  
   y = 1.0/nk;  
   for(k=N;k>0;k--)  
   {  
     nk = nk - 2;  
     y = 1.0/nk+xx*y;  

   }  
   return 2.0*x*y;  

}  

https://blog.csdn.net/mike190267481/article/details/7404702

然后关键来了,你不是要递归么?任何循环程序,都可以改写成递归

 double foo(int k, int nk, double y)
{
if (k == 0) return 1.0/nk+xx*y;
return foo(k-1, nk - 2;  1.0/nk+xx*y);
}
double MYLOG(double a)  
{  
   int N = 15;//我们取了前15+1项来估算  
   int k,nk;  
   double x,xx,y;  
   x = (a-1)/(a+1);  
   xx = x*x;  
   nk = 2*N+1;  
   y = 1.0/nk;  
     y=foo(N, nk, y);
   return 2.0*x*y;  

}  

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 return foo(k-1, nk - 2; 1.0/nk+xx*y);nk - 2后面是逗号,笔误
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!