首页 > 编程知识 正文

写一个方法实现字符串反转,如何实现字符串反转

时间:2023-05-06 20:02:08 阅读:42046 作者:1065

Python列表包含用于反转列表的方法。 要反转字符串,最好将字符串转换为字符列表,反转该列表,然后将列表恢复为字符串。 但是,递归使您可以轻松地创建直接反转字符串的函数,而不用将列表用作中间存储。

这样做的基本思想是以字符串为递归对象。 大字符串由几个小对象组成,这些对象也是字符串。 实际上,可以分割几乎所有序列的非常有用的方法是:

将该第一个元素视为单独的存在,该元素后面紧跟另一个序列。

字符串可以分为第一个字符和“所有其他字符”。 这样,可以通过反转字符串的其馀部分并将第一个字符放在字符串的末尾来反转整个字符串。 用这个算法做代码,看看会发生什么:

defreverse(s ) :returnreverse ) s[1:] ) s[0]请注意此方法的工作原理。 片s[1:]提供字符串中除第一个字符以外的所有字符。 然后反转(递归)此切片,并将第一个字符s[0]连接到此结果的末尾。 用具体的例子来考虑,可能有助于你的理解。 假设s是字符串abc,则s[1:]是字符串bc。 反转后产生cb,最后加上s[0]得到cba。 这就是我们想要的答案。

但是,很遗憾,这个功能不能正常工作。 以下是尝试运行此代码时发生的输出。

[ previouslinerepeated 996 more times ] recursion error 3360 maximumrecursiondepthexceeded此处仅显示部分输出。 输出实际上有1000多行! 那么,是什么导致了这个问题呢?

请回想一下。 为了构建正确的递归函数,需要不需要继续递归的基本情况。 否则,递归将是无限循环。 我们写函数代码的时候太着急了,忘了把基本情况包括在内。 因此,我们写的代码实际上是无限递归(infinite recursion )。 因为每次调用reverse方法时都会包含对另一个reverse方法的调用,所以它们将一直运行,完全不返回。 当然,每次调用函数时,都会消耗一些内存。 将参数和局部变量存储在运行时堆栈中。 因此,这一进程并不是永远持续下去的。 Python在第1000次调用后退出了此方法。 这是因为1000是默认的“最大递归深度”

回顾一下,找到合适的基本情况吧。 递归运行序列时,基本情况通常是空序列或只包含一个元素的序列。 在字符串反转问题中,空字符串是自己的反转,因此可以使用空字符串作为基本情况。 递归调用reverse方法时,始终使用比原始字符串短一个字符的字符串。 所以,最后我们总是得到空字符串。 这是reverse方法的正确版本:

defreverse(s ) : ifs==' ' : returns else : return reverse (s [ 1: ] ) s [0] print (reverse ) ' apple ) )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。