首页 > 编程语言 > 详细

Python之第三十四天的努力--递归函数

时间:2020-07-17 22:39:34      阅读:64      评论:0      收藏:0      [点我收藏+]

递归函数

  1. 递归的最大深度为1000层:为了节省内存空间,不要让用户无限使用内存空间。

    count = 0
    
    def func():
        global count
        count += 1
        print(count)
        func()
        print(456)
    
    func()
    
    # 1
    # ...
    # RecursionError:超过递归最大深度
    # 递归的最大深度1000层
    
    • 递归要尽量控制次数,如果需要很多层递归函数才能解决问题,不适合用递归解决。
    • 循环和递归的关系
      • 递归不是万能的
      • 递归比循环来说更占用内存
  2. sys可以修改最大递归深度:但是根据电脑的不同运行后的上限不同

    import sys
    sys.setrecursionlimit(10000)
    
    count = 0
    
    def func():
        global count
        count += 1
        print(count)
        func()
        print(456)
    
    func()
    
  3. 把递归函数 停下来

    • 递归函数怎么停下来

      # 递归3次就结束整个函数
      count = 0
      
      def func():
          global count
          count += 1
          print(count)
          if count == 3:
              return
          func()
          print(456)
      
      func()
      # 1
      # 2
      # 3
      # 456
      # 456
      
    • 递归函数要想结束,必须在函数内写一个return,并且return的条件必须是一个可达到的条件

      def func(count):
          count += 1
          print(count)
          if divmod(count,10) == (5,3):return
          func(count)
      
      func(1)
      # 1
      # 2
      # ...
      # 53
      
      # def func(count):
      #     count += 1
      #     print(count)
      #     if count == 5:return 5
      #     ret = func(count)
      #     print(count,‘:‘,ret)
      #     return ret
      #
      # print(‘-->‘,func(1))
      
      
      def func(count):
          count += 1
          print(count)
          if count == 5:return 5
          return func(count)
      
      
      print(‘-->‘,func(1))
      # 2
      # 3
      # 4
      # 5
      # --> 5
      
  4. 练习

    • 计算阶乘

      def fin(n):
          if n == 1:
              return n
          else:
              return n*fin(n-1)
      print(fin(5))
      
    • os模块:查看一个文件夹下的所有文件,这个文件夹下还有文件夹,不能用walk

    • os模块:计算一个文件夹下所有文件的大小,这个文件夹下面还有文件夹,不能用walk

    • 计算斐波那契数列

      def fib(n):
          if n == 1 or n == 2:
              return 1
          else:
              return fib(n-1)+fib(n-2)
      
      print(fib(6))
      
    • 三级菜单

      menu = {
          ‘北京‘: {
              ‘海淀‘: {
                  ‘五道口‘: {
                      ‘soho‘: {},
                      ‘网易‘: {},
                      ‘google‘: {}
                  },
                  ‘中关村‘: {
                      ‘爱奇艺‘: {},
                      ‘汽车之家‘: {},
                      ‘youku‘: {},
                  },
                  ‘上地‘: {
                      ‘百度‘: {},
                  },
              },
              ‘昌平‘: {
                  ‘沙河‘: {
                      ‘老男孩‘: {},
                      ‘北航‘: {},
                  },
                  ‘天通苑‘: {},
                  ‘回龙观‘: {},
              },
              ‘朝阳‘: {},
              ‘东城‘: {},
          },
          ‘上海‘: {
              ‘闵行‘: {
                  "人民广场": {
                      ‘炸鸡店‘: {}
                  }
              },
              ‘闸北‘: {
                  ‘火车战‘: {
                      ‘携程‘: {}
                  }
              },
              ‘浦东‘: {},
          },
          ‘山东‘: {},
      }
      
      def threeLM(dic):
          while True:
              for k in dic:print(k)
              key = input(‘input>>‘).strip()
              if key == ‘b‘ or key == ‘q‘:return key
              elif key in dic.keys() and dic[key]:
                  ret = threeLM(dic[key])
                  if ret == ‘q‘: return ‘q‘
      
       
      threeLM(menu)
      

Python之第三十四天的努力--递归函数

原文:https://www.cnblogs.com/szheng/p/13332850.html

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