qin_yin 发表于 2020-9-13 23:07:31

递归判断回文联

def is_palindrome(n, start, end):
      if start > end:
                return 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)
小甲鱼这为什么开始要将length = len(string)-1,然后传递给end,那么if n == n(初始值比较),第0位和第8位却不是为真,不理解,我觉得递归判断回文联好复杂{:10_261:}
(以上是个人想法,实际程序能正常判断)
,

昨非 发表于 2020-9-13 23:16:10

len(string)得到的长度是永远比最后以位的下标大一的,
而length作为实际参数传进去是要作为end的索引值的
作索引值当然要减一

昨非 发表于 2020-9-13 23:22:36

那么if n == n(初始值比较),第0位和第8位却不是为真
你是不是搞错了,第0位是“上”,第8位也是“上”,值为真的啊

小莫非 发表于 2020-9-13 23:24:40

因为是递归,你每次判断之后需要 字符串 n 的长度改变,这样才能将两个下标对应的元素进行比较
第一次递归:n == n
第二次递归:n == n
第三次递归:n == n
第四次递归:n == n
第五次递归:n == n--->返回 0, 递归结束

这样能理解了吗?{:10_256:}{:10_256:}

qin_yin 发表于 2020-9-13 23:43:54

昨非 发表于 2020-9-13 23:22
你是不是搞错了,第0位是“上”,第8位也是“上”,值为真的啊

是的
页: [1]
查看完整版本: 递归判断回文联