擅长:python、mysql、java
<p>您没有返回递归调用:</p>
<pre><code>else:
cnt += 1
logCall(int((int(x)/b)),b,cnt)
</code></pre>
<p>相反,您的函数只在那里结束,而返回<code>None</code>,这是函数没有显式<code>return</code>结尾的默认值。在</p>
<p>返回递归结果:</p>
^{pr2}$
<p>递归调用不会神奇地使调用帧也返回;对<code>logCall()</code>的调用是<em>,就像任何其他函数调用一样,您仍然需要处理返回的值。在</p>
<p>通过该更改,代码将返回预期值:</p>
<pre><code>>>> def myLog(x,b):
... def logCall(x,b,cnt):
... if (int(x) < b):
... return cnt
... else:
... cnt+= 1
... return logCall(int((int(x)/b)),b,cnt)
... return logCall(x,b,0)
...
>>> myLog(16,2)
4
</code></pre>
<p>{cd4>输入已经用完了。如果只想进行整数除法,请使用<code>//</code>floor division操作符。在</p>
<p>您可能需要添加一些空白以提高可读性,<code>else</code>是可选的,因为如果<code>if</code>测试为真,您已经退出了函数。我</p>
<p>最后,您可以给<code>cnt</code>一个默认值,无需嵌套函数:</p>
^{4}$