• Python递归函数的定义和几个小例子


    大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

    如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

    递归函数

    (1)什么是递归函数?

    我们都知道,一个函数可以调用其他函数。如果这个函数在内部调用它自己,那么这个函数就叫递归函数。

    (2)递归函数的作用

    举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * … * n

    '''
    python资料获取看这里噢!! 小编 V:qian97378,即可获取:
    文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
    '''
    #不使用递归的方法:
    n=4      #求4的阶乘
    result=1
    i=1
    while i<=4:
        result=result*i
        i+=1
    
    print(result)
    
    #使用递归的方法:
    def test1(n):#定义函数来计算数字n的阶乘
        if n==1:
            return 1
        return n * test1(n-1)
    
    print(test1(5))
    #1在函数的内部调用自己本身
    #2递归函数本质是一个方法的循环调用,注意:有可能出现死循环
    #3一定要定义递归的边界(什么时候退出循环)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    输出结果为:

     24
     120
     [Finished in 0.4s]
    
    • 1
    • 2
    • 3

    从上面两中方法的对比可以看出,递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用,

    注意:有可能会出现死循环。

    因此,使用递归函数时,一定要定义递归的边界(即什么时候退出循环)。

    递归函数的另一个案例是斐波纳契数列。

    斐波纳契数列:1,1,2,3,5,8,13。。。(该数列中,有n个数字,从第三个数字开始:数值 =前一个数字 + 前面一个数字)

    即,n=(n-2)+(n-1)

    '''
    python资料获取看这里噢!! 小编 V:qian97378,即可获取:
    文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
    '''
    def get_num(n):#获取斐波拉契数列中第n个数字的值
        if n==1 or n==2:
            return 1
        return get_num(n-1) + get_num(n-2)
    
    #把获取的斐波拉契数字存放到列表中
    nums=[]
    for i in range(1,21):
        nums.append(get_num(i))#get_num获得一个斐波拉契数字
    
    print(nums)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出结果为:

     [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
     [Finished in 0.4s]
    
    • 1
    • 2

    以上两个案例是递归函数的经典案例,需要记住其使用方法。

    注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。

    尾语

    好了,今天的分享就差不多到这里了!

    对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

    喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

    最后,宣传一下呀~👇👇👇 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀👇👇👇

  • 相关阅读:
    数据库-sqlserver数据库迁移到mysql
    应届生Java面试经验总结
    世界主要的11种气候类型特点及分布
    java毕业设计某服装店购物网站源码+lw文档+mybatis+系统+mysql数据库+调试
    Spring boot 读取properties文件内容
    C++11新特性nullptr
    由GEE生成逐月MODIS的NDVI影像
    关于IP-Adapter的十几个模型,到底是干啥用的?
    什么是MVCC多版本并发控制
    在中国,为中国——西门子低代码精准助力本土企业数字化探索之路
  • 原文地址:https://blog.csdn.net/weixin_62853513/article/details/134464738