Zia*_*man 2 c++ oop data-structures
因为我们知道树是递归数据结构,我们使用recurrsion来编写树的程序,如BST的删除方法等
.复发的优点是,我们的程序变得非常小(例如,遍历遍历的代码只有4或者是5行)而不是非复原程序,这种程序虽然冗长但不像理解透视中的递归程序那么复杂.这就是为什么我讨厌复发,我更喜欢写非复原程序,我已经在二元serach树和avl树做了.
现在请详细说明,更喜欢非递归程序而不是复发程序是不好或好事."
递归是一种与其他工具一样的工具.你不具备使用每一个工具这是可用的,但你至少应该了解它.
递归使得某类问题非常容易和优雅地解决,而你对它的"仇恨"充其量是不合理的.这只是一种不同的做事方式.
下面以递归和迭代的形式显示了"规范"递归函数(阶乘),并且在我看来,递归形式更清楚地反映了数学定义f(1) = 1, f(n) = n*f(n-1) for n>1.
Iterative: Recursive:
def fact(n): def fact(n):
r = n if n == 1:
while n > 1: return 1
r = r * n return n * fact(n-1)
n = n - 1
return r
Run Code Online (Sandbox Code Playgroud)
几乎我唯一喜欢迭代解决方案的地方(对于非常适合递归的解决方案)就是当堆栈大小的增长可能导致问题时(上面的阶乘函数可能是堆栈之后的那个)增长取决于n但它也可能被编译器优化为迭代解决方案).但是这个堆栈溢出很少发生,因为:
O(logN)和堆栈使用不会随着数据增加而快速增长.例如,您可以处理一个存储20亿个条目的16路树,只有7个堆栈级别(16 7 = ~26亿).| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |