鱼C论坛

 找回密码
 立即注册
查看: 1230|回复: 4

[已解决]递归判断回文联

[复制链接]
发表于 2020-9-13 23:07:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def is_palindrome(n, start, end):
        if start > end:
                return 1     
        else:
                return is_palindrome(n, start+1, end-1) if n[start] == n[end] 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[strat = 0] == n[end = 8](初始值比较),第0位和第8位却不是为真,不理解,我觉得递归判断回文联好复杂
(以上是个人想法,实际程序能正常判断)
,
最佳答案
2020-9-13 23:16:10
len(string)得到的长度是永远比最后以位的下标大一的,
而length作为实际参数传进去是要作为end的索引值的
作索引值当然要减一
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-13 23:16:10 | 显示全部楼层    本楼为最佳答案   
len(string)得到的长度是永远比最后以位的下标大一的,
而length作为实际参数传进去是要作为end的索引值的
作索引值当然要减一
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-13 23:22:36 | 显示全部楼层
那么if n[strat = 0] == n[end = 8](初始值比较),第0位和第8位却不是为真

你是不是搞错了,第0位是“上”,第8位也是“上”,值为真的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-13 23:24:40 | 显示全部楼层
因为是递归,你每次判断之后需要 字符串 n 的长度改变,这样才能将两个下标对应的元素进行比较
第一次递归:n[0] == n[8]
第二次递归:n[1] == n[7]
第三次递归:n[2] == n[6]
第四次递归:n[3] == n[5]
第五次递归:n[4] == n[4]  --->  返回 0, 递归结束

这样能理解了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-13 23:43:54 | 显示全部楼层
昨非 发表于 2020-9-13 23:22
你是不是搞错了,第0位是“上”,第8位也是“上”,值为真的啊

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 17:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表