递归并非万能

简介: 递归的确简洁, 但性能很差, 因为它进行了大量重复的计算,如果用递归运算做乘法, 5!*4! = 5*4*3*2*1 * 4*3*2*1显然4!完全可以算一遍, 而递归结结实实的算了两遍如果我们把每一步运算的结果都用字典存起来, 那就能减少大量的运算分享一道题目:给出1, 2, 3, 4, 5, .

递归的确简洁, 但性能很差, 因为它进行了大量重复的计算,
如果用递归运算做乘法, 5!*4! = 5*4*3*2*1 * 4*3*2*1显然4!完全可以算一遍, 而递归结结实实的算了两遍
如果我们把每一步运算的结果都用字典存起来, 那就能减少大量的运算

分享一道题目:

给出1, 2, 3, 4, 5, ..., n 一共n个数, 求用它们能够构成多少种形状不同的二叉搜索树

二叉搜索树 "左节点的值大于右节点"


二叉搜索树
class Solution:
    def __init__(self):
        self.ubs_dic = {0: 0, 1: 1}
    
    def numTrees(self, n):
        # 要求n的就必须把前面所有的项都求出来
        for k in range(n+1):
            tmp = 0
            for now_k in range(k):
                pre_left = self.ubs_dic[now_k]
                pre_right = self.ubs_dic[k-now_k-1]
                if pre_left == 0:
                    pre_left = 1
                if pre_right == 0:
                    pre_right = 1
                tmp = tmp + (pre_left * pre_right)
            self.ubs_dic[k] = tmp
        return self.ubs_dic[n]
def main():
    so = Solution()
    result = so.numTrees(10)
    print(result)

if __name__ == '__main__':
    main()
目录
相关文章
|
3天前
|
算法 JavaScript 前端开发
递归的递归之书:第五章到第九章
递归的递归之书:第五章到第九章
99 0
|
4天前
什么是递归函数?怎样实现递归?
什么是递归函数?怎样实现递归?
|
3天前
|
算法
【数据结构算法(一)】递归篇(常见实例讲解)
【数据结构算法(一)】递归篇(常见实例讲解)
|
4天前
|
算法 C语言 C++
【新手解答8】深入探索 C 语言:递归与循环的应用
【新手解答8】深入探索 C 语言:递归与循环的应用
35 0
|
4天前
|
机器学习/深度学习 算法 C语言
【新手解答9】深入探索 C 语言:递归与循环的应用2
【新手解答9】深入探索 C 语言:递归与循环的应用2
43 0
|
4天前
|
自然语言处理 算法 编译器
编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)
编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)
63 0
|
4天前
|
机器学习/深度学习
浅学函数递归
浅学函数递归
|
8月前
|
算法
轻轻松松学递归
轻轻松松学递归
|
9月前
|
机器学习/深度学习 Java 程序员
教你精通Java语法之第十二章、递归
内层函数调用(子集处理)完成,外层函数才能算调用完成。
42 0
|
10月前
|
机器学习/深度学习 算法 C语言
函数递归-------套娃套路深,要么你玩递归,要么递归玩你
函数递归-------套娃套路深,要么你玩递归,要么递归玩你