|
|
发表于 2016-10-22 08:53:02
|
显示全部楼层
本帖最后由 jerryxjr1220 于 2016-10-22 08:56 编辑
def is_palindrome(n,start,end):
if start > end: #这个语句是判断递归是否结束,当start>end时,函数返回 1
return 1
else:
return is_palindrome(n,start+1,end-1) if n[start] == n[end] else 0 #这句其实可以这么写:
if n[start] == n[end]:
return is_palindrome(n,start+1,end-1)
else:
return 0
string = input('请输入一串字符:')
length = len(string) -1
if is_palindrome(string,0,length):
print('\"%s"是回字文字符串!' %string)
else:
print('\"%s\"不是回字文字符串!' %string)
==========================分==割==线===========================
运行程序:
(1)string = input('请输入一串字符:')
你输入‘’上海自来水来自海上 “
(2)length = len(string) -1 --> length = 9-1 =8
(3)if is_palindrome(string,0,length): -->调用is_palindrome()函数;string=”上海自来水来自海上 “,length = 8
(4)is_palindrome(n,start,end)函数执行:对应的n=string=”上海自来水来自海上 “,start=0,end=length = 8
(a) if start > end: #这个语句是判断递归是否结束,当start>end时,函数返回 1
return 1 #第一次显然不成立,执行else后面的语句
else:
return is_palindrome(n,start+1,end-1) if n[start] == n[end] else 0 #这句其实可以这么写:
(b)if n[start] == n[end]: --> n[start]="上" == n[end] = '上', 成立,执行下面语句
return is_palindrome(n,start+1,end-1) -->再次调用is_palindrome()函数;start+1=1,end-1 = 7
(c)is_palindrome(n,start,end)函数执行:对应的n=”上海自来水来自海上 “,start=1,end = 7
(d) if start > end: #这个语句是判断递归是否结束,当start>end时,函数返回 1
return 1 #第二次显然也不成立,执行else后面的语句
else:
return is_palindrome(n,start+1,end-1) if n[start] == n[end] else 0 #这句其实可以这么写:
(e)if n[start] == n[end]: --> n[start]="海" == n[end] = '海', 成立,执行下面语句
return is_palindrome(n,start+1,end-1) -->再次调用is_palindrome()函数;start+1=2,end-1 = 6
(f)如此循环,直到:
is_palindrome(n,start,end)函数执行:对应的n=”上海自来水来自海上 “,start=5,end = 3
if start > end: #这个语句是判断递归是否结束,当start>end时,函数返回 1
return 1 #成立,返回1
(g)然后因为 return is_palindrome(n,start+1,end-1),把1再次向上层返回,逐层返回1,直到返回递归的第一层,最终函数返回值为1.
(5)if is_palindrome(string,0,length): --> 因为函数返回值是1,if语句成立,则执行下面语句
print('\"%s"是回字文字符串!' %string) -->打印 上海自来水来自海上 是回字文字符串!
程序结束。
够详细了吧 |
评分
-
查看全部评分
|