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

我们两清 提交于 2020-03-17 06:58:35

进击の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吧!

    那到底为什么呢????

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

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

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

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


  • 特性

    必须有明确的结束条件

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

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


*能不用就不用*
*有些算法要用*
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!