什么是递归呢?
一个函数在内部调用函数自身
每次调用都将问题转化为子问题来执行
废话不多说, 上实例:
- 以相反的顺序打印字符串
def revers(index, str): if index >= len(str): return revers(index + 1, str) print(str[index]) revers(0, 'abcde')
- 反转列表: 不开辟新列表的情况下
def revers(index=0, alist): if index >= len(alist): return alist ele = alist.pop() alist.insert(index, ele) revers(index+1, alist)
- 给定一个链表, 交换每两个相邻节点 如 1, 2, 3, 4 -> 2, 1, 4, 3
class Node(): def __init__(self, item): self.item = item self.next = None class Link(): def __init__(self): self.head = None def add(self, item): node = Node(item) if not self.head: self.head = node return cur = self.head while cur.next: cur = cur.next cur.next = node return def travel(self): if not self.head: print('空链表') return cur = self.head print(cur.item) while cur.next: cur = cur.next print(cur.item) def swap(self, node, n=1): if n: self.head = self.head.next if not node or not node.next: return node, node.next, node.next.next = node.next, node, node.next.next node.next.next = self.swap(node.next.next, 0) return node # 反转链表 def reversList(self, head): pre = head cur = head.next pre.next = None while cur: tmp = cur.next cur.next = pre pre, cur = cur, tmp self.head = pre # 递归实现反转链表 def revers(self, pre, cur, n=1): tmp = cur.next if n: pre.next = None cur.next = pre if tmp: self.revers(cur, tmp, 0) else: self.head = cur