我希望有一个程序只通过递归和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))
答案 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))