Qingquan-Li / blog

My Blog
https://Qingquan-Li.github.io/blog/
132 stars 16 forks source link

函数的回调和递归函数 #118

Open Qingquan-Li opened 5 years ago

Qingquan-Li commented 5 years ago

参考:函数的回调和递归函数:https://www.jianshu.com/p/8606f789b468?from=singlemessage&isappinstalled=0

回调函数参考:JavaScript函数-回调函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

递归的应用场景:遍历整个文件目录的结构、网络爬虫遍历整个网站的链接等。

Python 递归函数示例1:

def sum_numbers(num):
    print(num) # 分别打印:3、2、1
    # 递归出口。没有递归出口,可能导致死循环致程序中断。
    # 程序到达出后后,函数的调用才能一层一层地返回,一直返回到最初调用的位置:sum_numbers(3)
    # Python默认的递归(程序递归地自我调用次数)限制是1000次。
    if num == 1:
        return
    sum_numbers(num-1)
sum_numbers(3)

代码的执行流程图: 递归函数执行流程图



Python 递归函数示例2:

def sum_numbers(num):
    print(num) # 断点调试分别输出:3、2、1
    if num == 1:
        return 1
    # 满足条件num==1,把1作为函数的返回值,返回到上次调用函数的位置:sum_numbers(num -1 )
    temp = sum_numbers(num - 1)
    print('===============')
    print(temp) # 断点调试分别输出:1、3
    print('===============')
    print(temp + num) # 断点调试分别输出:3、6
    return temp + num
print(sum_numbers(3)) # 打印出6

代码的执行流程图: 相加递归函数执行流程图