递归

什么是递归呢?

  一个函数在内部调用函数自身

  每次调用都将问题转化为子问题来执行

 

废话不多说, 上实例:

  • 以相反的顺序打印字符串
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
        

 

posted @ 2019-10-26 16:05  眼镜儿  阅读(119)  评论(0编辑  收藏  举报