简体   繁体   English

通过递归打印字符串的一部分

[英]Printing part of a string by recursion

I'm trying to make a recursion sequence (Have to do it like this) where I print a * followed by the last character plus the following character on the next line, etc. So if "Hello" was passed, it would print: 我试图做一个递归序列(必须这样做),在其中打印一个*,然后是最后一个字符再加上下一行的下一个字符,等等。因此,如果传递了“ Hello”,它将打印:

*
o
ol
oll
olle
olleH

My question is, how do I get the last character to stay and how do I get the star to print first. 我的问题是,如何获得最后一个保留的字符,以及如何让该星形优先打印。 I have it so everything prints in reverse, but only one character and the star prints last. 我有它,所以一切都反向打印,但只有一个字符,最后是星号。 This is what I have: 这就是我所拥有的:

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

Thanks! 谢谢!

Try this: 尝试这个:

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

When the string has no length it will print * , otherwise it will recursively call with 1 less character and print the string reversed. 当字符串没有长度时,它将打印* ,否则它将递归调用,并减少1个字符,然后反向打印字符串。

As a traceback of reverse('two') : 作为reverse('two')的追溯:

Call - 'two'
 Call - 'wo'
  Call - 'o'
   Call - ''
    Print - '*'
    Return
   Print - 'o'
   Return
  Print - 'ow'
  Return
 Print - 'owt'
 Return

Call as reverse('Hello') 称为reverse('Hello')

Recursive version: 递归版本:

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)

Generator version 发电机版本

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'))))

this will print: 这将打印:

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)     

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

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