<p>如果我要修复您的代码并保留大部分代码,我会执行以下操作:</p>
<pre><code>def is_palindrome_recursive(x, pos_index, neg_index):
if -neg_index >= len(x):
return True
if x[pos_index] != x[neg_index]:
return False
pos_index += 1
neg_index -= 1
return is_palindrome_recursive(x, pos_index, neg_index)
def is_palindrome(string):
return is_palindrome_recursive(string, 0, -1)
print(is_palindrome("racecar"))
</code></pre>
<p>其中主要的变化是:当我们递归地将输入减少到一个字母或更少时,增加了一个<code>return</code>情况;处理递归调用的结果——一个常见的递归初学者错误</p>
<p>由于这不是一个固有的数学问题,我倾向于从解中得到数字和数学运算符。我还将把参数视为一个序列,而不是一个字符串,以允许在字符的<code>str</code>和<code>list</code>之间进行流畅的转换:</p>
<pre><code>def is_palindrome(sequence):
if sequence:
first, *rest = sequence
if rest:
*middle, last = rest
if first != last:
return False
return is_palindrome(middle)
return True
if __name__ == "__main__":
print(is_palindrome("racecar"))
print(is_palindrome("radar"))
print(is_palindrome("ABBA"))
print(is_palindrome("pop"))
print(is_palindrome("cc"))
print(is_palindrome("I"))
print(is_palindrome(""))
</code></pre>
<p>我希望这个问题的递归谓词函数</em>有三种<code>return</code>可能性:<code>return True</code>成功^失败时{<cd6>}<code>return is_palindrome(...)</code>一个递归,我还不知道</p>