首页 > 其他 > 详细

~~函数基础(四):递归函数~~

时间:2019-07-04 22:41:50      阅读:112      评论:0      收藏:0      [点我收藏+]

进击のpython


递归函数


学过数学的可能多多少少听过“递归”这个词

那么递归函数到底是怎么个函数呢?

老样子,从需求找方法!


我想要 100/2 结果继续除2,直到结果为零,然后打印每一步的结果

怎么写呢?可以用循环!对!

n = 100

while n > 0:
    n = int(n / 2)
    print(n)

技术分享图片

要的就是这种结果!但是,总有艮的

就想用函数来解决这个问题

甚至更过分的!还不想用循环!

能做吗?于是就有大傻子科学家研究出另一种写法:

def func(n):
    n = int(n/2)
    print(n)


func(100)

这么写还懂是吧

发现,n 这个变量就变成 50 了,然后还是要执行这个函数

也就是说,我可能要多次调用这个函数!

所以,就有了接下来的想法:

def func(n):
    n = int(n / 2)
    print(n)
    if n > 0:
        func(n)


func(100)

技术分享图片

成功了!那光成功不行啊,咱们得研究研究怎么做到的呢???

技术分享图片

有感觉出循环了吗?通过不断的自我调用,达到了目的

每一次的函数的输出都是基于上次的返回结果!


  • 进阶

    总有刁民想害朕!

    这不,有人写了这个代码!

    def func(n):
        n = int(n / 2)
        print(n)
        if n > 0:
            func(n)
        print(n)
    
    
    func(100)
    

    和上面的比,就多了一句话(找不到?捐眼睛吧)

    你试试结果是什么?和你想的一样吗?

    如果你没学过这地方

    指定和你想的不一样!

    输出结果是这样的:

    技术分享图片

    不是你想得100 也不是你想的1或者0吧!

    那到底为什么呢????

    以我现在的能力我只能这么给你解释

    要是不明白的话,确实是我能力不足

    还请大佬在下面评论一下,多谢!

    技术分享图片

    所以,输出就是那个鬼样子!


  • 特性

    必须有明确的结束条件

    每次进入更深一层的递归的时候,问题规模就会减少

    递归效率不高,容易栈溢出(别问,问就自己百度)


*能不用就不用*
*有些算法要用*

~~函数基础(四):递归函数~~

原文:https://www.cnblogs.com/jevious/p/11135210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!