擅长:python、mysql、java
<p>递归算法的思想是让它们递归,直到达到基本情况。截断递归算法可能会导致意外的结果和错误,特别是在有挂起的计算时。在</p>
<p>整数对数可以(应该)计算而不必处理浮点运算。考虑对数的实际意义:<code>log(x, base) == c</code>表示<code>base ** c == x</code>。在外行人的术语中,<strong>一个人自身乘以<code>base</code>多少次才能得到<code>x</code></strong>一个人需要将<code>x</code>除以另一个人的<code>base</code>多少次才能得到<code>c</code></strong>。在</p>
<p>在你的问题中,你想要的是整数对数,所以我们执行整数除法。这是你重新提出的问题:
<strong>一个人需要用(整数除法)<code>x</code>除以另一个人的<code>base</code>得到{<cd7>}</strong>。在</p>
<p>这样,程序就可以很容易地执行:</p>
<pre><code>def rec_ilogn(x, n):
"""return the integer logarithm of x to base n"""
assert x > 0, "Real logarithms are only defined for x > 0"
if x < n:
return 0
return 1 + rec_ilogn(x//n, n)
</code></pre>
<p>现在要测试代码:</p>
^{pr2}$