Possible Duplicate:
Recursion and Iteration
What is the difference between a recursive and a non-recursive function? Fibonacci to be exact.
I looking for answers that relate towards the time and memory.
Possible Duplicate:
Recursion and Iteration
What is the difference between a recursive and a non-recursive function? Fibonacci to be exact.
I looking for answers that relate towards the time and memory.
“递归”仅仅意味着一个函数调用自己。这可能是有意的,也可能不是有意的(无意的递归会导致很多崩溃)。
有意递归,其中一个函数执行部分操作,然后调用自己执行剩余部分,通常是一种有用的编程范式,但需要一定程度的理解/经验/技能才能“了解它”。
基本上,递归可用于替换“迭代”(循环)并替换伴随的数组分配(使用函数体本地的变量)。但并非每个迭代或使用数组的函数都可以有效地转换为其递归等效函数。
如果问题适合递归,通常可以编写一个递归版本,其执行效率与非递归版本大致相当……可能会稍好或稍差,具体取决于调用机制与循环和数组索引相比的效率在语言/编译器中。在存储方面,递归很少有效率更高,但它受益于不必为手头的特定问题预先分配(并且预先知道分配的大小)。
大多数情况下,递归更好(实际上是),因为它使实现更简单,更不容易出错,而错误是迄今为止计算中最大的成本。(当然,如果做得不正确,也会花费你很多时间。)
当递归很好时,它非常好。当递归很糟糕时,它非常糟糕。