为什么迭代版本需要更长的时间?


Answers:


10

这两个程序并不相同。递归版本正在计算

(...(((1 * 2)* 3)* 4 ... * n)

而迭代的是计算

(...(((n *(n-1))*(n-2)... * 1)

因此,对于迭代版本,中间数量增长更快,并且当涉及的数量较小时,大数量计算会更快(计算1000!没有大数量就没有意义,并且lisp方言会自动切换为大数量)。


1

在进行递归算法迭代时,必须显式实现用于跟踪结果的堆栈。该行为增加了额外的操作,处理推和弹出递归算法免费获得的堆栈(当然不是完全免费的,但额外的操作加起来超过了递归的成本)。


1
您看过这些程序吗?迭代阶乘根本不操纵堆栈。
AProgrammer 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.