了解递归字符串反转

时间:2015-06-01 19:25:28

标签: python string function python-2.7

我正在使用Python Tutorial visualize webpage来尝试理解这个反转字符串的函数的流程:

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

print reverse(text)

我理解这个函数的作用,但是即使使用可视化工具,我仍然没有完全理解函数流中函数的最后一行是如何操作的,因为它循环遍历字符串中的字符: / p>

return reverse(text[1:]) + text[0]

我自己得到reverse(text[1:])返回otext[0]返回h

但同样,还没有足够的经验来理解如何设置函数来使用[1:][0]循环遍历字符串 - 任何解释都会在最终字符串重新调整方面受到高度赞赏函数是'olleh'

2 个答案:

答案 0 :(得分:3)

reverse("hello")
-> reverse("ello") + "h"
-> reverse("llo") + "e" + "h"
-> reverse("lo") + "l" + "e" + "h"
-> reverse("o") + "l" + "l" + "e" + "h"
-> "o" + "l" + "l" + "e" + "h"
-> "olleh"

这是为了显示return reverse(text[1:]) + text[0]行及其行为的目的。

答案 1 :(得分:3)

这里是递归调用的序列,以及它们返回的内容。您会看到reverse("hello")返回reverse("ello")"h"的结果。

reverse("hello")
  --> return reverse("ello") + "h"

那么问题是reverse("ello")返回什么?

reverse("ello")
  --> return reverse("llo") + "e"

继续......

reverse("llo")
  --> return reverse("lo") + "l"

reverse("lo")
  --> return reverse("o") + "l"

最后,当reverse("o")被调用时,它会达到最低点。这是len(text) <= 1,因此只返回"o"

reverse("o")
  --> return "o"

然后,您可以从下往上按照自己的方式重新计算原始reverse("hello")来电的返回值。