递归打印字符串,每次递增

时间:2018-04-20 04:24:13

标签: python string python-3.x recursion reverse

我这里有这个函数,它将打印一个字符串,直到它到达最后一个字符。问题是我需要它做相反的事情。

而不是' abc'印刷' abc,ab,c'我需要它来打印&c; cc,bc,abc'。

谢谢!

def reverse(string):
  if len(string) == 0:
    return string
  else:
    print(string)
    return reverse(string[1:])

2 个答案:

答案 0 :(得分:2)

只需在其他地方切换2行即可。这将导致所有递归调用在之前发生任何print语句。一旦到达字符串的结尾,递归将展开并且所有print将发生:

def reverse(string):
    if not string:
        return
    else:
        reverse(string[1:])
        print(string)

reverse("abc")

输出:

c
bc
abc

答案 1 :(得分:1)

这里的基本案例很简单:字符串的长度为0,只需返回而不打印。如果它不是基本情况,那么您有两件事要做,继续打破字符串(递归)或打印字符串。根据订单,您可以按不同的顺序打印结果

>>> def rev(string):
...     if string:
...         rev(string[1:]) # keep breaking down the string
...         print(string) # print the string
...         return
...     else:
...         return
...
>>> rev('abc')
c
bc
abc

现在看看我们是否切换:

>>> def rev(string):
...     if string:
...         print(string) # print the string
...         rev(string[1:]) # keep breaking down the string
...         return
...     else:
...         return
...
>>> rev('abc')
abc
bc
c

注意,在else: return块结束后,您确实不需要returnif,但我保留它只是为了明确而且让你思考你的功能发生了什么。

将自己视为该功能的第一个预期版本。我收到一个字符串作为参数,它不是空的。然后我创建了一个自己的副本(因为我们想象的东西)然后分解我的字符串并将其交给他,给他"控制"。并且他做了同样的事情:检查字符串是否为空,如果是这样则将其分解,并创建一个克隆并给他新的字符串和控件,一直向下直到我们到达一个收到空的克隆串。此克隆只是检查并看到该字符串为空,并且控制权返回给调用他的克隆。此克隆现在执行下一步:他打印,此克隆是获得长度为1的字符串的克隆...在完成打印后,他返回控件给那个叫他的克隆人......