<p>您可以使用几行简单的代码自行调试。如果您通过添加一个计数器将代码限制为10个递归来人为地限制代码的堆栈溢出,并添加一个print语句来查看每个递归调用中程序的状态,那么您可以很容易地找到代码正在执行的操作,并将其与您期望的操作进行比较:</p>
<pre><code>def echo(a,b, counter=0):
if counter < 10 and len(b)>=2:
print('counter is: ', counter, ', I am using index: ', (-(int(len(b)*a))), ' which gives: ', b[(-(int(len(b)*a))):])
return [b]+echo(a,b[(-(int(len(b)*a))):], counter+1)
else:
return []
</code></pre>
<p>调用<code>print(echo(0.369,"I love mac and cheese."))</code>就可以得到:</p>
<pre><code>counter is: 0 , I am using index: -8 which gives: cheese.
counter is: 1 , I am using index: -2 which gives: e.
counter is: 2 , I am using index: 0 which gives: e.
counter is: 3 , I am using index: 0 which gives: e.
counter is: 4 , I am using index: 0 which gives: e.
counter is: 5 , I am using index: 0 which gives: e.
counter is: 6 , I am using index: 0 which gives: e.
counter is: 7 , I am using index: 0 which gives: e.
counter is: 8 , I am using index: 0 which gives: e.
counter is: 9 , I am using index: 0 which gives: e.
['I love mac and cheese.', ' cheese.', 'e.', 'e.', 'e.', 'e.', 'e.', 'e.', 'e.', 'e.']
</code></pre>
<p>这意味着,正如乔兰所说,你最终会无限地计算这一部分:</p>
<pre><code>'e.'[0:]
</code></pre>
<p>它的计算结果总是<code>'e.'</code></p>
<p>有了这些知识,我相信您一定能够想出如何修复代码</p>