递归与非递归
回答
递归函数是以编程语言实现的过程或子例程,其实现引用自身。
非递归函数是一种编程语言实现的程序或子程序,其实施不引用自身
下面是递归和非递归斐波那契数列的链接: - Recursive and Non Recursive Fibonacci Series
好吧,现在告诉我:这些 - 函数a(x ){return x? b(x-1):0; }函数b(x){return x? a(x-1):0; ''递归? – raina77ow
我不同意。我可以开发一个用给定的编程语言编写的函数,它调用用不同的编程语言编写的函数,并且这两个实现都引用“其他”函数。结果:递归引用,在每个函数的实现中不可见。这是一个间接递归。 – TheBlastOne
@ raina77ow,没错,你甚至不需要使用不同的语言。递归。间接的影响。 – TheBlastOne
“递归”只是手段一个函数自己调用。这可能是也可能不是有意的(无意的递归是造成大量崩溃的原因)。
故意递归(其中一个函数执行操作的一部分,然后调用自己执行其余部分)通常是一种有用的编程范例,但需要某种程度的理解/经验/技巧才能“ 。
基本上,递归可以用来代替“迭代”(循环)并替换伴随的数组分配(使用函数体的局部变量)。但并不是每个迭代或使用数组的函数都可以有效地转换为递归等价的。
如果该问题适用于递归,可以经常编写一个递归版本,该版本与非递归版本的执行效率相当......可能稍微更好或更差,具体取决于调用机制的效率如何与语言/编译器中的循环和数组索引相比。在存储方面,递归很少有效,但是它不需要为特定的问题预先分配(并且预先知道分配的大小)。
大多数情况下,递归更好(实际上是),因为它使得实现更简单,更容易出错,并且错误是计算中最大的成本。 (但是,当然,做得不当也可能花费你很大的时间。)
当递归很好时,它非常好。当递归不好时,它非常糟糕。
那么时间不受影响?记忆如何? – dalawh
两者都受到影响,只是效果不可预测。在简单情况下,递归的内存要高得多,因为每次调用都会有一个堆栈帧开销。但是对于复杂的情况,为了“万一”分配大型阵列的需求被消除了。 –
- 1. 递归锁(Mutex)与非递归锁(Mutex)
- 2. 递归与VS.尾递归
- 3. 非递归os.walk()
- 4. 递归代码非循环递归
- 5. 递归和非递归锁(互斥锁)
- 6. 性能:递归 - 非递归(IE)
- 7. 非递归制作
- 8. AVL树非递归
- 9. Java - SubSet和递归递归递归图
- 10. Haskell的递归函数与递归lambdas
- 11. 尾递归与前向递归
- 12. q - 递归与/
- 13. 递归与doT.js
- 14. 与Python递归
- 15. postgres - 与递归
- 16. 递归0s和1s递归
- 17. Java中的递归递归
- 18. asp.net mvc递归html递归
- 19. 我如何递归递归?
- 20. 与递归函数
- 21. 尾递归与List.fold_left
- 22. 变量与递归
- 23. 递归与列表
- 24. 递归与python argparse
- 25. 与递归混淆
- 26. 合并与递归
- 27. 递归与迭代
- 28. 递归与mod_rewrite的
- 29. 非递归makefile示例
- 30. 非递归阶乘C
递归函数调用递归函数。 – raina77ow
@ raina77ow,好的,但这是因为递归函数直接或间接地调用自己。 – TheBlastOne
你在问什么是递归和迭代之间的区别......它已经在SO上回答了很多次,http://stackoverflow.com/questions/72209/recursion-or-iteration和http://stackoverflow.com/问题/ 2576993 /递归和迭代和http://stackoverflow.com/questions/2185532/why-should-recursion-be-preferred-over-iteration – Arham