【发布时间】:2017-11-22 01:18:41
【问题描述】:
例如,斐波那契数列可以在使用递归时通过记忆来求解。但是迭代求解斐波那契(堆栈+while循环)也可以利用记忆化吗?
【问题讨论】:
-
任何递归算法都可以转换为功能相同的迭代算法,所以是的。如果您了解如何将斐波那契从递归转换为迭代,以及如何为递归版本实现记忆化,那么为迭代版本实施记忆化应该没有问题。
-
@Dukeling 在迭代解决方案中有什么要记住的?没有。您已经在商店上工作了,重用存储的值是它作为动态编程方法的意义。在动态(迭代)设置中谈论记忆是没有意义的。
-
@WillNess 如果您以功能相同的方式迭代地实现递归解决方案,如果您不重用先前计算的值,则将花费指数时间。但是当然不需要用斐波那契来做这件事,因为有一个更简单的迭代解决方案。迭代的方式不止一种。
-
@WillNess 递归记忆可以使用自上而下的解决方案。您是说迭代解决方案必须自下而上才能具有相同的优势?有没有一种方法可以迭代、自上而下地工作并且仍然可以获得记忆的好处?
-
@GabrielJohnRodriguez 我是说迭代的动态解决方案是自下而上的。它解释了动态存储中的记忆,从而消除了它。自上而下的OTOH是递归的。递归是自上而下的。国际海事组织。要么我们倒计时(并且在幕后记住以前的值有很大帮助),要么我们正在计数(因此我们通过设计明确地递增地产生值)。
标签: recursion data-structures dynamic-programming