函数的递归调用

一:递归的定义

函数的递归调用:是函数嵌套调用的一种特殊形式 具体是指: 在调用一个函数的过程中又直接或者间接地调用到本身

1、直接调用本身

def f1():
    print('我调我自己')
    f1()
f1()

2、间接调用本身

def f1():
    print('===>f1')
    f2()

def f2():
    print('===>f2')
    f1()

f1()

如何理解递归:

# 一段代码的循环运行的方案有两种
方式一:while、for循环
while True:
    print(1111)
    print(2222)
    print(3333)

# 方式二:递归的本质就是循环:
def f1():
    print(1111)
    print(2222)
    print(3333)
    f1()
f1()

如何结束一个递归函数:

def f1(n):
    if n == 10:
        return
    print(n)
    n+=1
    f1(n)

f1(0)

递归的两个阶段:

回溯:一层一层调用下去

递推:满足某种结束条件,结束递归调用,然后一层一层返回

例:

某公司四个员工坐在一起,问第四个人薪水,他说比第三个人多1000,问第三个人薪水,第他说比第二个人多1000,问第二个人薪水,他说比第一个人多1000,最后第一人说自己每月5000,请问第四个人的薪水是多少?

思路解析:

要知道第四个人的月薪,就必须知道第三个人的,第三个人的又取决于第二个人的,第二个人的又取决于第一个人的,而且每一个员工都比前一个多一千,数学表达式即:

salary(4)=salary(3)+1000 
salary(3)=salary(2)+1000
salary(2)=salary(1)+1000
salary(1)=5000
总结为:
salary(n)=salary(n-1)+1000 (n>1)
salary(1)=5000 (n=1)

在回溯阶段,要求第n个员工的薪水,需要回溯得到(n-1)个员工的薪水,以此类推,直到得到第一个员工的薪水,此时,salary(1)已知,因而不必再向前回溯了。然后进入递推阶段:从第一个员工的薪水可以推算出第二个员工的薪水(6000),从第二个员工的薪水可以推算出第三个员工的薪水(7000),以此类推,一直推算出第第四个员工的薪水(8000)为止,递归结束。需要注意的一点是,递归一定要有一个结束条件,这里n=1就是结束条件。

代码实现:

def salary(n):
    if n==1:
        return 5000
    return salary(n-1)+1000

s=salary(4)
print(s)

递归的应用

l=[1,2,[3,[4,[5,[6,[7,[8,[9,10,11,[12,[13,]]]]]]]]]]

def f1(list1):
    for x in list1:
        if type(x) is list:
            # 如果是列表,应该再循环、再判断,即重新运行本身的代码
           f1(x)
        else:
            print(x)

f1(l)

原文地址:https://www.cnblogs.com/bailongcaptain/p/12567281.html