zoukankan      html  css  js  c++  java
  • Python-14-函数_03_递归

    一、递归特性:
    1. 必须有一个明确的结束条件
    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,
    栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
     1 def num(n):
     2     print(n)
     3     if int(n / 2) == 0:
     4         return n
     5     return num(int(n / 2))
     6 num(10)
     7 输出:
     8 10
     9 5
    10 2
    11 1
    二、递归问路
     1 import time
     2 person_list = ['s1','s2','s3','s4','s5']
     3 def ask_way(person_list):
     4     print('-' * 60)
     5     if len(person_list) == 0:
     6         return "非常抱歉,我也不知道这个地方在哪儿."
     7     person = person_list.pop(0)
     8     if person == 's4':
     9         return "%s说:这个地方刚好在我家附近,我可以带你去."%person
    10     print("hello 帅锅[%s]请问你知道这个地方吗?"%person)
    11     print("%s说:非常抱歉,我也不知道这个地方在哪儿.不过看你长得那么好看,我帮你问问%s"%(person,person_list))
    12     time.sleep(2)
    13     res = ask_way(person_list)
    14     # print('%s问的结果是: %res' % (person, res))
    15     return res
    16 res = ask_way(person_list)
    17 print(res)
    三、二分查找
     1 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
     2 
     3 def binary_search(dataset, find_num):
     4     print(dataset)
     5 
     6     if len(dataset) > 1:
     7         mid = int(len(dataset) / 2)
     8         if dataset[mid] == find_num:  # find it
     9             print("找到数字", dataset[mid])
    10         elif dataset[mid] > find_num:  # 找的数在mid左面
    11             print("33[31;1m找的数在mid[%s]左面33[0m" % dataset[mid])
    12             return binary_search(dataset[0:mid], find_num)
    13         else:  # 找的数在mid右面
    14             print("33[32;1m找的数在mid[%s]右面33[0m" % dataset[mid])
    15             return binary_search(dataset[mid + 1:], find_num)
    16     else:
    17         if dataset[0] == find_num:  # find it
    18             print("找到数字啦", dataset[0])
    19         else:
    20             print("没的分了,要找的数字[%s]不在列表里" % find_num)
    21 binary_search(data, 66)
     
  • 相关阅读:
    第04组 Beta冲刺 (2/5)
    第04组 Beta冲刺 (1/6)
    第04组 Alpha冲刺 总结
    二叉树的递归与非递归
    各类典例模板
    选择题合辑2
    运算符重载
    链表题目
    集合的模拟实现(类模板)
    2018Final静态成员(黑名单)
  • 原文地址:https://www.cnblogs.com/newmet/p/9948030.html
Copyright © 2011-2022 走看看