数据结构和算法-递归

去的过程叫, 回的过程叫, 解决递归问题最重要的两步是python

  • 写递推公式
  • 找到终止条件

递归须要知足如下3个条件算法

  • 一个问题能够分解为多个子问题(数据规模更小的问题)
  • 主问题和分解后的子问题求解思路相同 - 基线条件
  • 存在递归终止条件

使用递归计算列表和

def add(nums):
    if len(nums) == 1:    # 终止条件
        return nums[0]
    return nums[0] + add(nums[1:])    # 递推公式


res = add(range(4))
print(res)

计算台阶问题

  • 终止条件
    f(1) = 1
    f(2) = 2
  • 递推公式
    f(n) = f(n-1) + f(n-2)缓存

    # coding:utf-8
    
    """
    台阶问题
    
    一共有7个台阶, 每一次只能走1个或2个, 有几种走法
    
    能够分为2类, 第一次走1个和第一次走2个
    f(n) = f(n-1) + f(n-2)
    
    终止条件是
    f(1) = 1, f(2) = 2
    """
    
    cache = {}  # 加上运算值的缓存, 避免出现重复计算
    
    def f_0(n):
        if n == 1:
            return 1
        if n == 2:
            return 2
        if n in cache:
            return cache[n]
        else:
            cache[n] = f_0(n - 1) + f_0(n - 2)
            return cache[n]

    改成非递归方式数据结构

    def f_1(n):
        """改成非递归形式"""
        if n == 1:
            return 1
        if n == 2:
            return 2
        x, y = 1, 2
        for _ in range(3, n + 1):
            x, y = y, x + y
        return y

注意

  • 递归调用可能致使堆栈溢出
  • 避免出现重复计算

资料

  • 数据结构和算法之美-王争
  • < <大话数据结构> >-程杰
  • < <漫画算法> >
  • < <数据结构和算法> >

相关文章
相关标签/搜索