擅长:python、mysql、java
<p>看看这个代码段:</p>
<pre><code> elif word < midword:
del t[midindex+1:]
findword (word, t)
</code></pre>
<p>在您的代码中,您会发现列表只包含两个元素,即:</p>
^{pr2}$
<p>在这种情况下,请查看以下交互式会话:</p>
<pre><code>In [15]: t = ['apple', 'banana']
In [16]: midindex = len(t)/2
In [17]: midindex
Out[17]: 1
In [18]: t[midindex+1:]
Out[18]: []
In [19]: del t[midindex+1:]
In [20]: t
Out[20]: ['apple', 'banana']
</code></pre>
<p>请注意,在第19行中,您没有删除任何内容,<code>t</code>保持不变,然后使用相同的列表调用{<cd2>},并进入无限递归,直到堆栈空间用完为止。你应该重新设计你的代码来克服这个问题。在</p>
<p>我看到的另一个问题是您只是递归地调用<code>findword</code>,但没有使用返回值。而不是:</p>
<pre><code> elif word < midword:
del t[midindex+1:]
findword (word, t)
</code></pre>
<p>您应该:</p>
<pre><code> elif word < midword:
del t[midindex+1:]
return findword (word, t)
</code></pre>
<h2>其他建议</h2>
<ul>
<li>{cd2>不要把cd2放在函数里面。排序可能很昂贵,因此您应该只在<code>findword</code>之外执行一次。在</li>
<li>正如其他人指出的那样,修改列表是一种不好的做法,相反,重新设计代码而不这样做</li>
<li>如果这不是家庭作业或练习,如果你想快速查找,我建议使用<code>set</code></li>
<li>Python有一个名为<code>bisect</code>的库模块,它将执行二进制搜索。在</li>
</ul>