跟着廖雪峰学python 006

yizhihongxing

  • 递归函数

在函数内部调用自身本身

计算阶乘:

def fact(n):
    if n == 1:
        return 1
    return n * fact(n - 1)

跟着廖雪峰学python 006

注意:使用递归函数需要防止栈溢出。

在计算机中,函数调用是通过栈(stack)实现,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多会导致栈溢出。

 

解决方法:尾递归优化。

尾递归: 在函数返回时,调用自身本身,且return语句不能包含表达式。

计算阶乘:

def fact(n):
    return fact_iter(n, 1)


def fact_iter(num, product):
    if num == 1:
        return product
    return fact_iter(num - 1, num * product)

跟着廖雪峰学python 006

fact(n)函数,由于return引入乘法表达式所以不是尾递归

fact_iter(num,product)函数,仅返回递归函数本身

尾递归调用如果做了优化,栈不会增长,无论多少次调用也不会导致栈溢出。

python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟着廖雪峰学python 006 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • 跟着廖雪峰学python 005

    ​  函数的调用、定义、参数  ​编辑  #######命名关键字参数没完 abs()函数:绝对值 >>> abs(100) 100 >>> abs(-20) 20 max()函数:接收任意多个参数,并返回最大的那个 >>> max(1, 2) 2 >>> max(2, 3, 1, -5…

    Python开发 2023年3月31日
    00
  • 跟着廖雪峰学python 003

    ​  ​编辑    列表和元组 list 是一种有序、可变的数据类型,可添加删除其中的元素。 len()函数:可以获取列表元素的个数 classmates = [‘Micheal’ , ‘Bob’ , ‘James’] print(classmates) print(len(classmates)) Terminal:        ​编辑    用索引来读…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部