递归并非万能

作者: zhaoolee | 来源:发表于2018-03-06 17:40 被阅读145次

递归的确简洁, 但性能很差, 因为它进行了大量重复的计算,
如果用递归运算做乘法, 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()

相关文章

  • 递归并非万能

    递归的确简洁, 但性能很差, 因为它进行了大量重复的计算,如果用递归运算做乘法, 5!*4! = 5*4*3*2*...

  • 冥想并非万能

    #微写作#第50天 现在很多人都在提倡冥想,冥想的确对人有很大帮助,但是冥想也不是万能呢,它能解决问题,但是它解决...

  • (转载)基于CPS变换的尾递归转换算法

    本文转载自基于CPS变换的尾递归转换算法 ,并非原创,只做收藏理解使用。 前言 众所周知,递归函数容易爆栈,究其...

  • 身份认同,“渡人”先“渡己” ——从《风雨哈佛路》探寻对厌学孩

    教育不是万能的,任何教育手段都不是万能的。苏霍姆林斯基和李镇西老师都谈“爱的教育”,也并非认为教师呈现的所谓“爱”...

  • AA制并非社交万能

    作为年轻人,如今AA制渐渐成为了我们与朋友聚餐时的首选。同学、刚刚认识的朋友,AA制不仅不会让我们与朋友的交往中造...

  • 金钱并非不是万能的

    单位闲聊,聊到了治疗血栓的特效药和天文数字的价格,继而又聊到了钱的功用,最后一致达成共识: 钱是万能的,没有钱是万...

  • GNU

    GNU 是“GNU's Not Unix !”(GNU并非Unix !)的首字母递归缩写;它是g发音的单音节字,就...

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • 还在为标题发愁,三个模型,轻松写出好标题

    “我称之为万能模型,也并非适合所有人,就如万能钥匙也不是真的能打开每一把锁一样。但我提供的这3种标题模型,确实可以...

  • 藿香正气并非万能解暑药

    藿香正气是根据宋代《太平惠民合剂局方》中藿香正气散制成,方剂学里将其归类于“祛湿剂”,功用是解表化湿、理气和中,主...

网友评论

本文标题:递归并非万能

本文链接:https://www.haomeiwen.com/subject/mesrfftx.html