• 函数的递归调用


    一:递归的定义

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

    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)

  • 相关阅读:
    遭遇未知.Net加密壳
    mscorjit的介绍,兼对某壳企业版的分析
    mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用
    浅谈DotNet 保护中的字符串加密技术
    谈anti ILdasm的原理以及anit 框架API的可行性
    .Net 反射脱壳机核心源代码
    基于Html5的移动应用开发经验总结:第一篇架构选型篇(上)
    Windows 远程桌面服务开启
    求小于一个数n的所有数的阶乘
    uva 490 Rotating Sentences
  • 原文地址:https://www.cnblogs.com/bailongcaptain/p/12567281.html
Copyright © 2020-2023  润新知