回顾递归三原则:
- 递归算法必须有基本情况
- 递归算法必须改变其状态并向基本情况靠近
- 递归算法必须递归的调用自己
代码如下:
def reverse_list(lst):
if len(lst) == 2:
return lst.append(lst.pop(0))
else:
temp = lst.pop(0)
reverse_list(lst)
lst.append(temp)
return lst
思路:
- 基本情况,列表长度为2的反转,直接弹出首位元素并追加到列表尾部即可
- 算法应朝基本情况演进,当列表长度大于2时,不断弹出首位元素并用变量记录
- 算法调用规模更小的自身
- 执行到最小情况后的返回操作,不断将规模稍大子程序的temp追加到队尾
总结 : 因为使用了pop(0)的操作,所以算法的复杂度为O(n)
如果有更简便的方法,欢迎指点讨论