fjsboy 发表于 2022-10-26 22:57:44

23.24回文字符串递归解法表达式怎么理解

def is_palindrome(n, start, end):
      if start > end:
                return 1    # 这里为什么返回1 啊   
      else:
                return is_palindrome(n, start+1, end-1) if n == n else 0
      
string = input('请输入一串字符串:')
length = len(string)-1

if is_palindrome(string, 0, length):
      print('"%s"是回文字符串!' % string)
else:
      print('"%s"不是回文字符串!' % string)

就返回1那里不懂。。。

suchocolate 发表于 2022-10-26 23:02:34

python数据类型基础:非零的数字,都是True。

柿子饼同学 发表于 2022-10-26 23:04:53

这个字符串判断到最后的时候如果 start == end , 那就是
is_palindrome(n, start + 1, end - 1) 但是这时候传进的 start 就等于 end
因此在下一层中 start 就 大于 end
你可以想想 , 只有每一对字符都判断相等之后才会到 start == end -> start + 1 > end - 1
这一步 , 不然他们早就被返回 0 了
0 是 False1 是 True

jackz007 发表于 2022-10-26 23:13:02

本帖最后由 jackz007 于 2022-10-26 23:19 编辑

def is_palindrome(n, start, end):
      这个函数每次递归需要比较字符串首尾索引为 start 和 end 两个字符是否相等,如果相等,将 start、end 向字符串 n 的中心方向各减少 1 个字符距离,继续递归,如果不相等,就立即返回 0 值。这样,当字符串首尾索引出现 start > end 的时候,说明字符串中的所有字符对的比较已经结束,而且,全部相等,据此,即可以判断,字符串 n 就是一个回文字符串。

fjsboy 发表于 2022-10-26 23:13:28

柿子饼同学 发表于 2022-10-26 23:04
这个字符串判断到最后的时候如果 start == end , 那就是
is_palindrome(n, start + 1, end - 1) 但是这时 ...

谢谢   懂了意思就是要到start > end 这一步的前提是前面全部是 true 所以才返回1    不然就是false   自己逻辑思维还要加强啊。。谢谢。。。

fjsboy 发表于 2022-10-26 23:14:30

jackz007 发表于 2022-10-26 23:13
这个函数每次递归需要比较字符串首尾索引为 start 和 end 两个字符是否相等,如果相等就继续递归 ...

谢谢。。
页: [1]
查看完整版本: 23.24回文字符串递归解法表达式怎么理解