擅长:python、mysql、java
<p>为了避免递归,您可以将状态保存在列表中,我会更好地解释。你知道吗</p>
<pre><code>def steps(source, step, dest):
q = Queue()
q.put((0,1))
while True:
source, ste = q.get()
if abs(source) > dest:
return sys.maxint
if source == dest:
return step
q.put(source+step+1, step+1)
q.put(source-step-1, step+1)
</code></pre>
<p>这样做可以在队列中保存要检查的位置,并且每次检查不是最后一个位置的位置时,都会在队列末尾添加新的2位置。这种方法也保证了所求的解是最短的。
为了进一步提高速度,你可以保存一个已经访问过的数字列表,这样每次你再次找到相同的数字时,就会停止研究,这会大大加快任务的速度</p>