如何在python中编写一个代码,它是一个递归函数,返回一个字符串,其参数中的每个字符都重复了?

时间:2015-10-20 05:30:20

标签: python recursion

例如,“什么”这个词将是什么样的。 我无法确定如何递归地执行此操作。 感谢。

1 个答案:

答案 0 :(得分:2)

递归通常包含两件事:

  • 根据稍微复杂的案例定义一个复杂的案例;和
  • 定义所有其他案例最终休息的基本案例。

在您的特定情况下,给定一个字符串,以下伪代码应该执行您想要的操作:

def dubble(s):
    if s is "":
        return ""
    return s.firstChar + s.firstChar + dubble(s.otherChars)

换句话说,要将字符串加倍:如果字符串为空,则返回空字符串。否则制作第一个字符的两个副本,并将其附加到字符串的双重其余部分。给定字符串'what',您将看到:

dubble('what')
    -> 'w' + 'w' + dubble('hat')
    -> 'w' + 'w' + 'h' + 'h' + dubble('at')
    -> 'w' + 'w' + 'h' + 'h' + 'a' + 'a' + dubble('t')
    -> 'w' + 'w' + 'h' + 'h' + 'a' + 'a' + 't' + 't' + dubble('')
    -> 'w' + 'w' + 'h' + 'h' + 'a' + 'a' + 't' + 't'
    -> 'wwhhaatt'

现在,虽然上面的伪代码看起来像有点像Python,但这只是因为Python是伪代码的绝佳语言。你仍然需要将算法实现为“真正的”Python,记住字符串s的第一个字符可以通过s[0]获得,其他字符可以通过s[1:]获得。< / p>

如果这是课堂作业甚至是自我教育,我建议你自己做。如果没有,并且您只想要一个解决方案,您可以在 1 下面看到一个。

当然,Python爱好者(似乎很看重简洁)只会完全绕过递归,而且会这样做:

print(''.join([c * 2 for c in "what"]))

1 一个解决方案,如果它不是教育性的,你只想要一个答案:

def dubble(s):
    if len(s) == 0: return ""
    return s[0] + s[0] + dubble(s[1:])

print(dubble("what"))                  # Remove outer () for Python 2