递归与非递归

时间:2012-10-17 16:39:42

标签: recursion non-recursive

  

可能重复:
  Recursion and Iteration

递归函数和非递归函数之间有什么区别?确切地说斐波那契。

我在寻找与时间和记忆相关的答案。

2 个答案:

答案 0 :(得分:1)

“递归”只是意味着函数调用自身。这可能是也可能不是故意的(无意的递归是造成大量崩溃的原因)。

有意递归,其中函数执行操作的一部分,然后调用自身执行剩余部分,通常是一种有用的编程范例,但需要一定程度的理解/经验/技巧来“理解它”。

基本上,递归可用于替换“迭代”(循环)并替换附带的数组分配(使用函数体本地的变量)。但并非每个迭代或使用数组的函数都可以有效地转换为递归等价函数。

如果问题适合递归,那么通常可以编写一个递归版本,其执行效率与非递归版本大致相当......可能会稍微好一点或者更差,具体取决于效率如何将调用机制与语言/编译器中的循环和数组索引进行比较。在存储方面,递归很少有效,但它不需要为手头的特定问题预先分配(并预先知道分配的大小)。

大多数递归更好(实际上是这样),因为它使实现更简单,更不容易出错,而错误是计算中最大的成本。 (但当然不正确的做法也会花费你很多时间。)

当递归很好时,它非常好。当递归很糟糕时,它非常糟糕。

答案 1 :(得分:0)

递归函数是用编程语言实现的过程或子例程,其实现引用自身。

非递归函数是用编程语言实现的过程或子例程,其实现不参考自身

以下是递归和非递归斐波那契系列的链接: - Recursive and Non Recursive Fibonacci Series