擅长:python、mysql、java
<p><code>return True</code>只从调用它的函数的单个实例返回。由于这是一个递归函数,因此最终会得到一堆函数实例,如下所示:</p>
<pre><code>is_palindrome('abcdcba')
is_palindrome('bcdcb')
is_palindrome('cdc')
is_palindrome('d')
</code></pre>
<p>递归最终在最后一个(字符串长度为1)中到达其基本情况并返回<code>True</code>。问题是,它只返回到<code>is_palindrome('cdc')</code>实例。从这里开始,由于您没有告诉函数对结果执行任何操作,它只返回<code>None</code>到下一个实例。类似地,<code>None</code>通过堆栈传播回初始函数调用。那不是很有用。你知道吗</p>
<pre><code> ^ None ^
is_palindrome('abcdcba')
^ None ^
is_palindrome('bcdcb')
^ None ^
is_palindrome('cdc')
^ True ^
is_palindrome('d')
</code></pre>
<p>当您<code>return</code>取而代之的是递归调用的结果时,这将导致函数的每个<em>实例获取下一个</em>实例返回的内容,并将其传递回上一个<em>实例,一直传递到原始调用。换句话说,它创建了一个链,允许最终结果一路传播回用户。你知道吗</p>
<pre><code> ^ True ^
is_palindrome('abcdcba')
^ True ^
is_palindrome('bcdcb')
^ True ^
is_palindrome('cdc')
^ True ^
is_palindrome('d')
</code></pre>