用Javascript实现记忆

如果您曾经编写过多次计算相同值的递归函数,则可能发现自己希望以某种方式存储这些函数调用的结果以便快速检索。 您可能会说,对于我的函数来说,要记住它已经计算出的值! 别担心-借助闭包和哈希表的强大功能,备忘录可以帮助我们做到这一点。 对于在那里的CS历史学家来说,“记忆”(源自备忘录 ,拉丁语为“要记住”)是英国人工智能先驱唐纳德·米奇(Donald Michie)发明的,他于1968年首次发表了有关“记忆”功能的力量的学术文章。本质上,记忆是一种将先前函数调用的结果存储(“缓存”)在诸如哈希表之类的数据结构中的技术,以便在再次调用它们时可以快速检索它们。 这种“缓存”的功能真正体现在进行许多函数调用的递归函数中。 例如,采用递归算法来得出斐波那契数列*中的第n个数。 我们将要计算Fib(n-1)和Fib(n-2)的值,以便计算n的值。 当然,如果n为1或0,我们将根据斐波那契数(f(0)= 0,f(1)= 1)的“种子值”简单地返回n。 此功能非常出色,因为它清晰明了-两行! 但是考虑一下计算recursiveFib(5)所需的工作: 我们已经在进行重复的函数调用:我们两次计算recursiveFib(2)! 这是方便进行备忘录的地方。 这是使用备忘录的相同功能: 好的,让我们分解一下这里发生的事情:…