前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >递归并非万能

递归并非万能

作者头像
zhaoolee
发布2018-04-19 17:03:22
3880
发布2018-04-19 17:03:22
举报
文章被收录于专栏:木子昭的博客木子昭的博客

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

分享一道题目:

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

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

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分享一道题目:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档