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

What are the advantages of recursion compared to regular loops?

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

a = 1

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

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

def func3():
    func1()

有没有什么时候像这样使用递归比常规循环更有益?如果是,应该什么时候使用,约定是什么?

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

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

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

可读性也是一个重要的考虑因素,老实说,我相信您的示例可以从循环中获益。

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

递归调用和循环的用途:

当你使用递归时:

  • 都是很简单的逻辑调用方式
  • 取决于你进行递归的深度,你会遇到内存问题
  • 它们最适合用于树函数或方法

当你使用循环时

  • 逻辑清晰但不像递归调用那样简单
  • 与递归方法或函数相比,您可以更好地控制内存使用
  • 它们用于列表项的迭代。