def recursivelog(n, x, b):
assert n >= 0
assert x >= 1
assert isinstance(b, int)
assert b >= 2
float(x) # this statement does not change x so is useless here
if(x < b):
return 0
else:
return 1+ recursivelog(n-1, x/b, b)
n
表示步骤数(或递归调用)
x
要计算其对数的数字
b
对数的底
而结果将舍入到最接近的正整数
^{pr2}$如何得到实数结果?在
递归算法的思想是让它们递归,直到达到基本情况。截断递归算法可能会导致意外的结果和错误,特别是在有挂起的计算时。在
整数对数可以(应该)计算而不必处理浮点运算。考虑对数的实际意义:
log(x, base) == c
表示base ** c == x
。在外行人的术语中,一个人自身乘以base
多少次才能得到x
一个人需要将x
除以另一个人的base
多少次才能得到c
。在在你的问题中,你想要的是整数对数,所以我们执行整数除法。这是你重新提出的问题: 一个人需要用(整数除法)} 。在
x
除以另一个人的base
得到{这样,程序就可以很容易地执行:
现在要测试代码:
^{pr2}$你可以做的一件事是在这里使用二进制搜索。 下面这样的方法应该有效:
你可以做些调整来改善。如果你担心效率,你可以使用你的算法,直到你的函数返回一个小于基数的值。您可能应该使用它来计算小于基数的值的日志。在
相关问题 更多 >
编程相关推荐