【问题标题】:Printing part of a string by recursion通过递归打印字符串的一部分
【发布时间】:2017-04-24 08:29:15
【问题描述】:

我正在尝试制作一个递归序列(必须这样做),其中我打印一个 * 后跟最后一个字符加上下一行的以下字符等。所以如果传递了“Hello”,它将打印:

*
o
ol
oll
olle
olleH

我的问题是,如何让最后一个字符留下来,如何让星号先打印出来。我有它,所以一切都反向打印,但只有一个字符和星号最后打印。这就是我所拥有的:

def reverse(s):
    if len(s) == 0:
        return ('*')
    else:
        print(s[-1])
        return reverse(s[0:-1])

谢谢!

【问题讨论】:

    标签: python recursion


    【解决方案1】:

    试试这个:

    def reverse(s):
        if len(s) == 0:
            print(*)
        else:
            reverse(s[1:])
            print(s[::-1])
    

    当字符串没有长度时,它会打印*,否则它会递归调用少1个字符并打印反向的字符串。

    作为reverse('two')的回溯:

    呼叫 - '两个' 呼叫 - 'wo' 呼叫 - 'o' 称呼 - '' 打印 - '*' 返回 打印 - 'o' 返回 打印 - '哦' 返回 打印 - 'owt' 返回

    拨打reverse('Hello')

    【讨论】:

    • 完美!也谢谢你的解释!
    【解决方案2】:

    这将打印:

    olleh
    olle
    oll
    ol
    o
    *
    
    output=[]
    def reverse(s):
        if (len(s)>0):
            print(s[::-1])
            output.append(s[::-1])
            reverse(s[1:])
        else:
            print('*')
            output.append('*')
    
    reverse('hello')        
    # if you do need the original order, see below
    for e in (output[::-1]):
        print(e)     
    

    【讨论】:

      【解决方案3】:

      递归版本:

      def reverse(s, length, iteration):
          if iteration == 0:
              return '*' + reverse(s, length, iteration+1)
          elif iteration == length:
              return s[::-1]
          else:
              return '%s\n' % s[length - iteration: length][::-1] + reverse(s, length, iteration+1)
      
      input = 'Hello'
      print(input, len(input), 0)
      

      生成器版本

      def reverse(s):
          print('*')
          length = len(s)
          for i in range(1, length + 1):
              yield s[length - i: length][::-1]
      
      
      print('\n'.join(list(reverse('Hello'))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 2020-07-25
        • 1970-01-01
        • 2017-02-17
        • 2014-01-12
        • 1970-01-01
        相关资源
        最近更新 更多