def reverse(text):
if text == "":
return text
else:
return reverse(text[1:]) + text[0]
print(reverse("Hello World!")[:-1])
我想删除字符串的第一个字符,然后将其反转。我知道如何在没有递归的情况下做到这一点,但我真的很困惑如何这样做。
以上是我能想到的唯一方法。我只需要提示,完整的答案会有所帮助,虽然我更喜欢提示。
要求
答案 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