与常规循环相比,递归有什么优势?

时间:2015-11-17 13:15:56

标签: python recursion theory

我在上一个问题中遇到过这段代码:

a = 1

def func1():
    if a == 1:
        func2()

def func2():
    if a == 1:
        func3()

def func3():
    func1()

有没有时间使用递归这样比常规循环更有益?如果是这样,何时应该使用它和什么是惯例?

2 个答案:

答案 0 :(得分:3)

有递归调用和循环的用法:

使用递归时:

  • 非常简单的逻辑调用方法
  • 取决于你在递归中的深度,你会遇到记忆问题
  • 它们最适合在树函数或方法上使用

使用循环时

  • 干净的逻辑但不简单,因为递归调用有时候
  • 您可以更好地控制内存使用而不是递归方法或函数
  • 它们用于列表项的迭代。

答案 1 :(得分:2)

两者都有其优点和缺点,主要取决于编程语言。

在硬件级别,Recursion带有成本,每次调用函数时,底层机制都必须存储一个指针,指向程序在函数完成后必须在代码中跳转的位置。除此之外,它还必须存储函数参数和局部变量。这一切都存储在程序堆栈中。

然而,在使用递归时,某些问题有一个更自然的解决方案,例如tower of hanoi

可读性也是一个重要的考虑因素,说实话我相信你的例子可以从循环中受益。

迭代和递归之间的广泛比较here。 总结了优缺点。