![]() |
1
3
它应该和 memoization (自上而下)一种动态编程。 逐步填充表的迭代方法(自底向上动态编程)可能有稍微不同的复杂性,因为memoization只记住构建最终解决方案所需的参数集。 对于fibbonacci或阶乘示例,这种差异并不重要,但对于具有稀疏子问题表的任务(当很难预测以后将使用哪些条目时),这种差异可能会发生。 |
![]() |
2
0
下面将比较您所显示的函数。一般来说,这些观察结果不一定适用于 任何 计算斐波那契数的递归或迭代方法,但仅限于问题中所示的实现。 时间复杂性:第一次呼叫
后续通话
常数因子
常数因子可能完全不同。很可能(第一次调用)迭代方法比递归方法更快,尽管两者都是
内存复杂性:两者都需要O(N)额外的内存,但是递归方法将保留内存(因此它是永久分配的),而迭代方法将在函数完成后释放内存。 其他差异
python的递归限制。当时间太长,缓存没有填满时,递归方法就会因为这个限制而失败,例如
|
|
Justin Haddock · 动态规划Python路径算法 7 年前 |
|
Pal Jereh · 形成字符串的最小路径 7 年前 |
|
Reddy90 · 计算二进制表示形式正好需要数字1的数字 7 年前 |
![]() |
daniel · java—如何避免将全局外部变量作为递归函数的输出 7 年前 |
![]() |
ng.newbie · TopCoder中的示例违反了约束 7 年前 |
![]() |
Mohamed Benkedadra · 数组中每个元素的递归 7 年前 |