递归和迭代

一、递归的含义及一些用途

  递归就是函数通过 return 语句实现自己调用自己的过程,基本上所有的程序语言都有递归算法,常有人说(’一般程序员使用迭代,天才程序员使用递归‘),汉诺塔游戏、谢尔宾斯基三角形、斐波那契数列

二、递归的深度和设定递归深度的函数

  Python3 中针对递归提供了程序保护机制,默认允许的递归深度是 1000 层,此时我们常常会使用超过 1000 层的递归深度,这时我们就可以使用 Python3 的默认程序修改递归层数,该函数在 sys 模块里面的 setrecursionlimit() 函数进行设置,参数就是想要的层数,

  例:setrecursionlimit(250)

def jiecheng(number):
    if number == 1:
        return 1
    else:
        return number*jiecheng(number-1)

n = jiecheng(5)
n
120

n = jiecheng(80)
n
71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000

三、递归和迭代的对比

相同点:

  • 递归和迭代都是循环的一种

不同点:

  • 递归是重复调用函数自身实现循环,会使代码变得精简且高效,但是递归时调用函数需要入栈出栈,对于内存和 CPU 的消耗比较大,递归是根据终止条件来结束递归

  • 迭代是函数内某段代码实现循环,而迭代是通过计数器来结束循环,当循环次数较大时,迭代的效率明显高于递归