zyj1214 发表于 2020-11-20 20:14:19

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

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("请输入一串字符串:")#这里我输入:addddda
length = len(string)-1

if is_palindrome(string,0,length): #这里面的实参是什么意思?跟形参start end之间是什么关系?
    print('"%s"是回文字符串!' % string)
else:
    print('"%s"不是回文字符串!' % string)

return is_palindrome(n,start+1,end-1) if n == n else 0 这句该怎样理解,当n == n不成立时,,下面的步骤应该是怎样的,最好一步一步写,,求解::多谢多谢!!

sunrise085 发表于 2020-11-20 21:55:27

这么短的程序,自己拿着笔顺着走一遍不就出结果了么。。。若这个都搞不定,那么今后如何去看上万行的代码。。。
形参和实参不理解,这到还算是个问题
打个比方,有一张表(就是函数),表中需要填写信息(信息名称实际上就是形参),需要的信息有姓名、性别、年龄(就好比这里的n、start、end)。小明填写了他的信息:小明、男、15岁(这就是实参,相当于string,0,length-1)

这次帮你写一下注释,今后更多还是要靠自己,那样学到的才扎实
def is_palindrome(n,start,end):#3、第一次调用,is_palindrome('addddda',0,6)
    if start > end:#4、判断0>6,为假,去执行else
      return 1
    else:/5、执行下面这句
      return is_palindrome(n,start+1,end-1) if n == n else 0 #6、先判断n==n,若为真,返回is_palindrome('addddda',1,5)的值,若为假返回0,显然为真,那么递归调用is_palindrome('addddda',1,5),再去执行3
string = input("请输入一串字符串:")#这里我输入:addddda
length = len(string)-1 #1、length=7-1=6

if is_palindrome(string,0,length): #2、函数的返回值作为if的条件,所以先去执行函数,is_palindrome('addddda',0,6)
    print('"%s"是回文字符串!' % string)
else:
    print('"%s"不是回文字符串!' % string)

zyj1214 发表于 2020-11-21 08:52:24

你要问幼儿园小朋友,一元二次方程都不会,,小朋友怎么回答你,就是因为不懂才问的,,你要是不想回复,,不理我问的问题就行了呗,何必这样说。

zyj1214 发表于 2020-11-21 08:56:24

还有代码我是拷贝别人的,形参和实参我理解,忘了删除这一行问题
#这里面的实参是什么意思?跟形参start end之间是什么关系?

Twilight6 发表于 2020-11-21 12:01:52

本帖最后由 Twilight6 于 2020-11-21 12:03 编辑



看下下面这些递归大致步骤,你前面太长了,但是大体上就这里后续的样算都是这样:

假设你输入是 ada , 此时 length 就为 2 ,然后调用函数 is_palindrome(string,0,length) 则:

is_palindrome('ada',0,2) --> if start(0) > end(2) --> False --> else --> return is_palindrome('ada',0+1,2-1) if n == n else 0 --> return is_palindrome('ada',0+1,2-1)

第一次进入递归:

is_palindrome('ada',1,1) --> if start(1) > end(1) --> False --> else --> return is_palindrome('ada',1+1,1-1) if n == n else 0 --> return is_palindrome('ada',2,0)

第二次进入递归:

is_palindrome('ada',2,0) --> if start(2) > end(0) --> True--> return 1

最终返回 1 ,这里 return 用了三元运算符,即 <结果> if <条件> else <结果> , if 条件成立,则执行 if 前面的结果,反之执行 else 后面的结果


zyj1214 发表于 2020-11-21 19:36:37

Twilight6 发表于 2020-11-21 12:01
看下下面这些递归大致步骤,你前面太长了,但是大体上就这里后续的样算都是这样:

假设你输入是 ada ...

大神就是大神。。。多谢了
页: [1]
查看完整版本: 回文字符串递归解法表达式怎么理解?