字符串的基本递归?

时间:2016-03-10 18:03:22

标签: python string recursion

我希望有一个程序只通过递归和if-else子句以这种方式打印一个单词:

  


  PY
  PYT
  Pyth
  Pytho
  蟒

为什么以下代码不起作用?它给出了超出最大递归深度的错误。

def oneToAll (word, x):
    if -x < 0:
        print(word[:-x])
        oneToAll(word, x+1)
    else:
        return

wordOutside = "Python"
oneToAll(wordOutside, len(wordOutside))

3 个答案:

答案 0 :(得分:1)

def oneToAll (word, x):
    if -x < 0:
        print(word[:-x])
        oneToAll(word, x-1)
    elif x == 0:
        print(word)
    else:
        return

wordOutside = "Python"
oneToAll(wordOutside, len(wordOutside))

这似乎有效。请注意,我现在使用x-1代替x+1进行了递归,因为您希望x始终朝0方向前进。

以这种方式实现,您必须处理x == 0的特殊情况。在这种情况下,您希望打印整个字符串,而不是word[:0](始终为空字符串)。另请注意,我没有从0分支进一步递归。这是因为在这一点上,你已经完成了。您实际上可以完全删除else子句(试一试!)。

答案 1 :(得分:0)

我可能会遗漏一些东西,但你可以做到这样的事情:

def one_to_all(w):
    if w:
        one_to_all(w[:-1])
        print w

one_to_all('Python')

您的代码不起作用,因为(i)您将x加1而不是减1并且(ii)当x达到零时,word[:-x]是一个空字符串,因此您需要处理案件分开。

答案 2 :(得分:0)

使用直观的“word”索引

尝试此代码
def oneToAll(word, x):
    if x > 1:
        print (word[0:len(word) - x])
        oneToAll(word, x - 1)
    elif x == 1:
        print (word)

wordOutside = "Python"
oneToAll(wordOutside, len(wordOutside))