你对text[-1]和text[:-1]给你的东西是正确的。我认为你会被它的递归方面绊倒,这是一个棘手的部分。在
当你在处理递归的东西时,不要考虑太多。我知道大多数编程都要求您理解代码的每一个细微差别,但是递归是不同的。如果你在脑子里想一想递归函数的调用堆栈,你只会感到困惑。人脑不像电脑。在我们迷失方向之前,我们的堆栈只能达到三层。在
对于这个问题,你想用这样的方式来思考:"To reverse a string, you simply take the last character and put it at
the beginning of the reversified version of the remaining characters."
它看起来像是一个无稽之谈,因为它是根据自身定义的,但这正是递归的本质,一个根据自身定义的函数。在
所以对于您的问题,text[-1]给出了列表中的最后一项,text[:-1]给出了剩下的字符。在
例如,如果您的列表是[1, 2, 3, 4],那么对每个递归调用的求值将如下所示:backwards([1, 2, 3, 4])
计算结果为
^{pr2}$
其计算结果为4 + 3 + backwards[1, 2])
其计算结果为4 + 3 + 2 + backwards([1])
其计算结果为4 + 3 + 2 + 1
当我第一次回答这个问题时,我认为你列出的函数不起作用,而你想要一个起作用的函数,所以我很快就把它组合起来了。当我写这篇文章的时候,我把上面列出的引语输入到我的文本编辑器中,然后写出python代码(看起来就像您发布的代码)。我并不是在脑子里一步一步地完成每一个调用,我只是把句子打出来,然后写一些代码来实现这个句子。在
递归需要一些习惯,但是一旦你了解了递归思考的方式,你就可以把它应用到所有类型的问题上。在
另一个可能更直接一点的例子是一个递归函数,它将一个列表中的所有数字相加。在sum([1, 2, 3, 4]) => 10
所以这件事的陈述应该是To sum a list, add the first item in the list to the sum of the
remaining elements in the list.
python将如下所示:def sum(a):
if len(a) == 0:
return 0
else:
return a[0] + sum(a[1:])