码迷,mamicode.com
首页 > 其他好文 > 详细

递归函数

时间:2019-01-17 21:12:50      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:for   obj   执行   else   占用   dep   cee   结束   限制   

递归
递归指的是递归调用,简单地说就是一个函数在执行过程中又直接或是间接的调用该函数本身


递归调用本质上就是在循环执行代码,与普通循环不同的是,函数调用,会产生一系列内存开销,所以就会导致内存溢出,
而循环则没有这个问题,
如此一来,则表示所有递归能干的事情循环也能干.

在使用递归时要注意:
1.一定要在某个条件满足时结束循环调用
2.循环调用的次数不能超过系统的限制
3.每一次执行函数都应该使问题的规模减少,否则就是无用的循环
4.python中没有尾递归优化机制(使得递归调用时占用的开销更小)
递归时可能出现以下错误:
RecursionError: maximum recursion depth exceeded while calling a Python object
在调用函数时超出了最大递归深度
python为了防止递归太多导致内存溢出,所以给递归调用加上了深度(次数)限制,默认为1000

在使用递归完成遍历所有元素(不知道有几层)时,可以发现,递归使用起来,代码量更少,并且代码结构更加清晰
什么时候该使用递归:
你不知道到底要循环几次
函数直接调用自己
# def func():
#     a = 100
#     print("func run")
#     func()

间接调用

# def f1():
#     print("f1 run")
#     f2()
#
# def f2():
#     print("f2 run")
#     f1()
# f1()

实例,

第一个人工资比第二个多1000,第二个比第三个多1000,第三个比第四个多1000 ,第四个工资100,求第一个人的工资

# def money(n):
#     if n == 1:
#         return 100
#     else:
#         return money(n-1) + 1000
#
# res = money(4)
#
# print(res)

 

li = [1,[2,[3,[4]]]]
# 使用递归的方式来获取所有元素

def show_list(li):
    for i in li:
        if type(i) == list:
            show_list(i)
        else:
            print(i)
show_list(li)

 


















递归函数

标签:for   obj   执行   else   占用   dep   cee   结束   限制   

原文地址:https://www.cnblogs.com/Hale-wang/p/10284201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!