鱼C论坛

 找回密码
 立即注册
查看: 1941|回复: 5

[已解决]课23、24的动动手2,回文字符串的递归版本

[复制链接]
发表于 2016-8-15 16:25:24 | 显示全部楼层 |阅读模式

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

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

x
  1. #回文联:上海自来水来自上海,递归版本
  2. #思路:利用递归每次索引前后两个字符进行对比,当start>end的时候,也正是首尾下标碰面的时候,即作为结束递归条件
  3. def is_palindrome(n,start,end):
  4.     if start > end:
  5.         return 1
  6.     else:
  7.         return is_palindrome(n,start+1,end-1) if n[start] == n[end] else 0

  8. string = input('请输入一串字符串:')
  9. length = len(string)-1

  10. if is_palindrome(string,0,length):
  11.     print('"%s"是回文字符串!'%string)
  12. else:
  13.     print('"%s"不是回文字符串!'%string)
复制代码


请问:请问为什么start>end时,返回1,没明白,能不能解释一下这段代码的含义?一点没看懂
最佳答案
2016-8-15 17:49:06
既然你都知道start和end是索引开始和结束,那n就是对应的字符串呀
调用函数的时候,参数写的位置,就对应定义函数时那个位置上的参数
def is_palindrome(n,start,end):
is_palindrome(string,0,length)
上面的 第一个是定义函数,第二个是调用函数
那么使用这个函数的时候就会把string的值放到n中,0放到start中,length放到end中,然后再去做对应的一些列计算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-15 16:37:14 | 显示全部楼层
看下图,再对照代码自己想一下,不懂再问
搜狗截图20160815163627.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-15 17:20:16 | 显示全部楼层
shuofxz 发表于 2016-8-15 16:37
看下图,再对照代码自己想一下,不懂再问

还是有一些地方不太懂,(n,start,end)里start和end是索引开始和结束,那么n是什么?string才是输入的字符串啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-15 17:49:06 | 显示全部楼层    本楼为最佳答案   
既然你都知道start和end是索引开始和结束,那n就是对应的字符串呀
调用函数的时候,参数写的位置,就对应定义函数时那个位置上的参数
def is_palindrome(n,start,end):
is_palindrome(string,0,length)
上面的 第一个是定义函数,第二个是调用函数
那么使用这个函数的时候就会把string的值放到n中,0放到start中,length放到end中,然后再去做对应的一些列计算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-4 21:36:05 | 显示全部楼层
shuofxz 发表于 2016-8-15 17:49
既然你都知道start和end是索引开始和结束,那n就是对应的字符串呀
调用函数的时候,参数写的位置,就对应 ...

挖坟 再请教下这题。。
return is_palindrome(n,start+1,end-1) if n[start] == n[end] else 0

if n[start] == n[end] else 0  这里的if else用法 貌似甲鱼哥没讲过么 是判断长度为奇数的字符串的终止条件吗? 那是不是当start>end 是长度为偶数的字符串终止的条件呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-5 11:48:46 | 显示全部楼层
Isaiah 发表于 2017-4-4 21:36
挖坟 再请教下这题。。
return is_palindrome(n,start+1,end-1) if n[start] == n[end] else 0

把这个先简化一下变成
return A if B else C
这个意思就是如果B成立,那就返回A,否则返回C
你在看一下原来的代码 看能不能理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 09:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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