繁体   English   中英

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

[英]Recursively printing string backwards, increment each time

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

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

谢谢!

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

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

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

reverse("abc")

输出:

c
bc
abc

这里的基本情况很简单:字符串的长度为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 ,或者在if块结尾之后return ,但我保留它只是为了明确并让你思考你的函数中发生了什么。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM