zoukankan      html  css  js  c++  java
  • ~~函数基础(四):递归函数~~

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

      那到底为什么呢????

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

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

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

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


    • 特性

      必须有明确的结束条件

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

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


    *能不用就不用*
    *有些算法要用*
  • 相关阅读:
    Vue学习(十七)修饰符
    组件学习(一)开发组件前必读
    vue学习(十六)“就地更新”策略
    nrm学习(一)
    帧动画的多种实现方式与性能对比
    JavaScript中的二进制对象
    生成式模型与判别式模型
    堡垒机
    vue生产环境nginx配置代理转发跨域
    Ceph nautilus 集群部署
  • 原文地址:https://www.cnblogs.com/jevious/p/11135210.html
Copyright © 2011-2022 走看看