• python基础----递归函数(二分法、最大深度递归)


    递归函数

    定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

     1 #例子1
     2 # age(5)=age(4)+2         n=5   age(n)=age(n-1)+2
     3 # age(4)=age(3)+2         n=4   age(n)=age(n-1)+2
     4 # age(3)=age(2)+2         n=3   age(n)=age(n-1)+2
     5 # age(2)=age(1)+2         n=2   age(n)=age(n-1)+2
     6 # age(1)=10               n=1   age(n)=10
     7 
     8 # n=1 res=10
     9 # n>1 res=age(n-1)+2
    10 
    11 #递归------------代码实现
    12 def age(n):
    13     if n == 1:
    14         return 10
    15     else:
    16         return age(n-1)+2 #age(4)+2
    17 print(age(5))
    举例

    递归特性:

    1. 必须有一个明确的结束条件

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

    3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

     1 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]
     2 # num=19
     3 # i=0
     4 # while True:
     5 #     if num == data[i]:
     6 #         print('find it')
     7 #         break
     8 #     i+=1
     9 
    10 def search(num,data):
    11     print(data)
    12     if len(data) > 1:
    13         #二分
    14         mid_index=int(len(data)/2)
    15         mid_value=data[mid_index]
    16         if num > mid_value: #19>18
    17             #num在列表的右边
    18             data=data[mid_index:] #data[0:]-->[18]
    19             search(num,data)
    20         elif num < mid_value:
    21             #num在列表的左边
    22             data=data[:mid_index]
    23             search(num,data)
    24         else:
    25             print('find it')
    26             return
    27     else:
    28         if data[0] == num:
    29             print('find it')
    30         else:
    31             print('not exists')
    32 
    33 # search(9527,data)
    34 search(15,data)
    35 # search(1,data)
    二分法
     1 import sys
     2 sys.setrecursionlimit(10000)        #setrecursionlimit   最大递归深度
     3 
     4 def func(n):
     5     if n == 10:
     6         return
     7     print('from func')
     8     func(n-1)
     9 
    10 func(10)
    最大递归深度
  • 相关阅读:
    django中有外键关系两张表的相互查找方法
    Python的Django框架中forms表单类的使用方法详解
    Django 模板中 变量 过滤器 标签 的使用方法
    Django如何让未登录的用户自动跳转至登录页
    Django 前后台的数据传递
    用css实现在横线中间插入文字
    CSS控制字体在一行内显示不换行
    如何在python3环境下的Django中使用MySQL数据库
    Linux小技巧之:两种方法统计访问web网站的前10个IP
    通过explain分析低效的SQL执行计划
  • 原文地址:https://www.cnblogs.com/wangyongsong/p/6709555.html
Copyright © 2020-2023  润新知