• 递归函数


    初识递归函数

    初识递归

    	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('输入不正确,重新输入!')
  • 相关阅读:
    Docker篇章1:Docker介绍
    flask-restful结合vue自定义错误类型
    9.Go语言-函数
    8.Go语言-流程控制
    7.Go语言-结构体
    6.Go语言-指针
    5.Go语言-map类型
    计算机组成原理笔记2-数制、字符、校验码、定点数、浮点数、算术逻辑单元
    计算机组成原理笔记1--基础概念丶性能指标
    计算机网络笔记2--物理层
  • 原文地址:https://www.cnblogs.com/liliudong/p/9599171.html
Copyright © 2020-2023  润新知