反向字符串并删除第一个字符

时间:2017-04-28 14:58:52

标签: python python-3.x recursion

def reverse(text):
    if text == "":
        return text
    else:
        return reverse(text[1:]) + text[0]

print(reverse("Hello World!")[:-1])

我想删除字符串的第一个字符,然后将其反转。我知道如何在没有递归的情况下做到这一点,但我真的很困惑如何这样做。

以上是我能想到的唯一方法。我只需要提示,完整的答案会有所帮助,虽然我更喜欢提示。

要求

  • 必须使用递归解决方案。

2 个答案:

答案 0 :(得分:3)

如果确实想要一个递归解决方案,只需更改终止条件即可停止一个字符"太早"。另外,反转从字符串中弹出字符的顺序,否则最后一个字符将被删除。

def reverse(text):
    if len(text) <= 1:
        return ""
    else:
        return text[-1] + reverse(text[:-1])

实施例

>>> reverse("Hello World!")
!dlroW olle

答案 1 :(得分:0)

在递归方面只是一个额外的提示。

递归可能真的令人困惑。如果添加一些打印件,则可以更容易掌握。

更改为输入添加->的代码和返回<-的代码,我们可以看到递归深度和所有输入和输出值。

def reverse(text, depth=0):
    print("{} -> {}".format(" " * depth, text))
    if len(text) <= 1:
        print("{} <- ''".format(" " * depth))
        return ""
    else:
        tmp = text[-1] + reverse(text[:-1], depth=depth + 1)
        print("{} <- {}".format(" " * depth, tmp))
        return tmp

s = reverse("Hello World!")
print(s)

输出:

 -> Hello World!
  -> Hello World
   -> Hello Worl
    -> Hello Wor
     -> Hello Wo
      -> Hello W
       -> Hello
        -> Hello
         -> Hell
          -> Hel
           -> He
            -> H
            <- ''
           <- e
          <- le
         <- lle
        <- olle
       <-  olle
      <- W olle
     <- oW olle
    <- roW olle
   <- lroW olle
  <- dlroW olle
 <- !dlroW olle