zoukankan      html  css  js  c++  java
  • 递归函数

    初识递归函数

    初识递归

    	def story():
    		print('从前有座山山里有座庙庙里有个老和尚')
    		story()
    
    • 在函数中调用自己,就是递归函数
    • 最大递归深度998,最大递归深度可以修改
    • 优点:让代码变得简单
    • 缺点:占用内存

    • 分析问题

        #递归小例子,求年龄
        '''
        小明多大?   n=1 age(1) = age(1+1) +2 >> age(n+1) +2
        比小芳大两岁
        小芳多大?   n=2 age(2) = age(2+1) +2 >> age(n+1) +2
        比小猪大两岁
        小猪多大?   n=3 age(3) = age(3+1) +2 >> age(n+1) +2
        比小王大两岁
        小王多大?   n=4
        40岁
        '''
        #定义递归函数
        def age(n):
            if n == 4:
                return 40
            elif n > 0:
                return age(n+1) + 2
        #调用
        print(age(3))	#给age一个参数完成计算
      

    初识算法

    • 计算的方法

        99 * 13 = 100 * 13 - 13 = 1300 - 13 = 1287 
      
    • 查找

    • 排序

    • 最短路径问题

    二分查找算法

    - 必须处理有序的数列
    		
    		#二分查找算法
    		def er_fen(num, iter, start=0, end=None):
    		    end = len(iter) if end is None else end #确保end不是一个常量
    		    mid_index = (end - start)//2 + start    #目标索引位置
    		    if start <= end:
    		        if num == iter[mid_index]:
    		            return '位置在{}'.format(mid_index)
    		        elif num > iter[mid_index]:
    		            return er_fen(num, iter, start=mid_index+1, end=end)
    		        elif num < iter[mid_index]:
    		            return er_fen(num, iter, start=start, end=mid_index - 1)
    		    else:
    		        return '没有这个数!'
    		li = [0, 1, 2, 3, 4, 8, 10, 33, 49,  1234, 3443]
    		
    		#调用
    		print(er_fen(10, li))
    		print(er_fen(100, li))
    		#结果
    		位置在6
    		没有这个数
    

    斐波那蝎数列

    • 返回值

    递归案例

    1. 三级菜单 -吊的一批
      • 利用了return的作用

          dic = {
              '大城市': {
                  '北京': {
                      '一环': {},
                      '二环': {},
                      '郊区': {}
                  },
                  '上海': {
                      '东方明珠': {},
                      '珠江路': {},
                      '哈哈路': {}
                  }
               },
              '小城市': {
                  '阜阳': {
                      '界首市': {},
                      '临泉县': {}
                      },
                  '合肥': {
                      '明光路': {},
                      '虹桥机场': {},
                      '香格里拉': {}
                  }
              }
          }
          
          def func(d):
              while 1:
                  for i in d:
                      print(i)
                  name = input('>>').strip()
                  if name == 'q' or name == 'b':
                      return name
                  elif name in d.keys() and d[name]:
                      ret = func(d[name])
                      if ret == 'q':
                          return 'q'
                  elif not d.get(name) or not d[name]:
                      continue
          func(dic)
        
      • 利用堆栈实现三级菜单

          l = [dic]	#dic是上面的数据
          while l:
              for i in l[-1]:
                  print(i)
              k = input('>>').strip()
              if k in l[-1].keys() and l[-1]:
                  l.append(l[-1][k])
              elif k =='b':
                  l.pop()
              elif k == 'q':
                  break
             else:
             	print('输入不正确,重新输入!')
  • 相关阅读:
    METHODS OF AND APPARATUS FOR USING TEXTURES IN GRAPHICS PROCESSING SYSTEMS
    Display controller
    Graphics processing architecture employing a unified shader
    Graphics-Processing Architecture Based on Approximate Rendering
    Architectures for concurrent graphics processing operations
    Procedural graphics architectures and techniques
    DYNAMIC CONTEXT SWITCHING BETWEEN ARCHITECTURALLY DISTINCT GRAPHICS PROCESSORS
    Thermal zone monitoring in an electronic device
    System and method for dynamically adjusting to CPU performance changes
    Framework for Graphics Animation and Compositing Operations
  • 原文地址:https://www.cnblogs.com/liliudong/p/9599171.html
Copyright © 2011-2022 走看看