前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python之递归函数

Python之递归函数

作者头像
新人小试
发布于 2018-04-12 03:07:08
发布于 2018-04-12 03:07:08
86300
代码可运行
举报
文章被收录于专栏:代码世界代码世界
运行总次数:0
代码可运行

递归函数

初识递归函数

递归函数的定义:在一个函数里再调用这个函数本身

Python为了考虑保护内存占用情况,有一个递归深度的限制。

探究递归的默认最大深度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)

强制的将递归层数控制在了997,此后会报错,报错只是计算机为了保护内存。当然了,997是python为了我们程序的内存优化所设定的一个默认值,我们当然还可以通过一些手段去修改它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
print(sys.setrecursionlimit(100000))
n = 0
def story():
    global n
    n += 1
    print(n)
    story()

story()

输出不会报错,但也会有个自动退出的值,这个值适合计算机的自身配置有关,一般情况都是3222,MAC会更大点。 递归的优缺点 缺点:比较占用内存,如果需要递归次数太多,就不太合适用递归算法来解决问题。

优点:会让代码简单

人理解循环,神理解递归。

解题理解递归

例一:

现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。

你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。

你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。

那你问金鑫,金鑫告诉你,他40了。。。

这个时候你是不是就知道了?alex多大?

1

金鑫

40

2

武sir

42

3

egon

44

4

alex

46

你为什么能知道的?

首先,你是不是问alex的年龄,结果又找到egon、武sir、金鑫,你挨个儿问过去,一直到拿到一个确切的答案,然后顺着这条线再找回来,才得到最终alex的年龄。这个过程已经非常接近递归的思想。

我们就来具体的我分析一下,这几个人之间的规律。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
age(4) = age(3) + 2 
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 40

我们写成递归函数,就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def age(n):
    if n == 1:
        return 40
    else:
        return age(n-1)+2

print(age(4))

分步骤分析这个递归函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def age(1):
    if 1 == 4:
        return 40
    elif 1 >0 and 1 < 4:
        return age(1+1) + 2

def age(2):
    if 2 == 4:
        return 40
    elif 2 >0 and 2 < 4:
        return age(2+1) + 2

def age(3):
    if 3 == 4:
        return 40
    elif 3 >0 and 3 < 4:
        return age(3+1) + 2

def age(4):
    if 4 == 4:
        return 40
    elif 3 >0 and 3 < 4:
        return age(3+1) + 2

例二:用二分法理解递归

二分查找算法 必须处理有序的列表

比如现在有一个列表,寻找指定数字,用二分法怎样实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def find(l,aim,start = 0,end = None):
    end = len(l) if end is None else end
    mid_index = (end - start)//2 + start
    if start <= end:
        if l[mid_index] < aim:
            return find(l,aim,start =mid_index+1,end=end)
        elif l[mid_index] > aim:
            return find(l, aim, start=start, end=mid_index-1)
        else:
            return mid_index
    else:
        return '找不到这个值'

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
ret= find(l,66)
print(ret)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
函数之递归[通俗易懂]
在讲今天的内容之前,我们先来讲一个故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢……这个故事你们不喊停我能讲一天!我们说,生活中的例子也能被写成程序,刚刚这个故事,让你们写,你们怎么写呀?
全栈程序员站长
2022/07/21
5320
递归
函数的嵌套调用是:函数嵌套函数。函数的递归调用:它是一种特殊的嵌套调用,但是它在调用一个函数的过程中,又直接或间接地调用了它自身。
py3study
2020/01/16
6120
Python基础10-函数的递归
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
2360
Python基础10-函数的递归
Python递归函数,二分查找算法
正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997(只要997!你买不了吃亏,买不了上当...).
changxin7
2019/08/14
7850
Python递归函数,二分查找算法
Python中21道个程序小练习
lambda 表达式也就是匿名函数,一些简单的功能需要实现的时候可以用匿名函数,一行语句体搞定。
Python学习者
2023/03/24
5020
leetcode之-题34
GavinZhou
2018/01/02
5120
day 17 - 1 递归函数
  了解什么是递归 : 在函数中调用自身函数   最大递归深度默认是 997/998 —— 是 python 从内存角度出发做得限制   能看懂递归   能知道递归的应用场景   初识递归 —— 二分法的例子   算法 —— 二分查找算法   三级菜单 —— 递归实现
py3study
2020/01/20
3710
Python基础5
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法
hankleo
2020/09/16
3230
Python基础5
Python实现二分法搜索
假设有一个1~100之间的数字,你来猜这个数是多少,每猜一次可以得到三种回答:正确、大了或小了。如何保证用最少的次数猜对?很多人会想到先猜50,如果猜大了,说明答案比50小,然后猜25...用这种方法,每次都可以将数字的范围缩小一半,对于1~100之间的任何数,最多都只需要7次就能找到答案。
Python碎片公众号
2021/02/26
1.5K0
Python实现二分法搜索
python3--递归函数,二分查找算法的实现
递归,执行一次开辟一个空间,python对内存有个保护机制,默认只能递归到998层
py3study
2018/08/02
8490
python开发第六篇--递归函数和面
面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。
py3study
2020/01/03
3290
python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04
应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)   -->  l = [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, ]]]]]]]]]]]]]
suwanbin
2019/09/26
9760
python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04
Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录:     一、三元表达式、列表推导式、生成器表达式     二、递归调用和二分法     三、匿名函数     四、内置函数 ================================
Jetpropelledsnake21
2018/05/02
1.2K0
Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
python基础——匿名函数及递归函数
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
菲宇
2019/06/13
4890
python基础——匿名函数及递归函数
Python中的递归与二分查找
998是python为了我们程序的内存优化所设定的一个默认值,我们当然还可以通过一些手段去修改它
星陨1357
2023/03/14
6290
Python中的递归与二分查找
python递归函数讲解_Python递归函数实例讲解
本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 last = len(alist)-1 found = False while first<=last and not found: midpoint = (first + last)//2 if alist[midpoint] == item: found = True else: if ite
全栈程序员站长
2022/11/17
3.5K0
python递归函数讲解_Python递归函数实例讲解
python中的递归函数
递归的定义: 在函数内部直接或者间接调用函数本身 递归的应用: △求一个数的阶乘 1 def jiecheng(n): 2 if n == 1: 3 return 1 4 else: 5 return n*jiecheng(n-1) 6 print(jiecheng(4)) △求第几个斐波那契数 1 def f(n): 2 if n == 2: 3 return 1 4 elif n ==1: 5 return
人生不如戏
2018/04/11
1.9K0
Python 递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
全栈程序员站长
2022/09/07
1.4K0
Python 递归函数
python 递归函数——从入门到懵逼
目录 递归函数 1、定义:函数在运行的过程中,直接和间接调用了自身,就是递归函数 2、递推到回溯的流程图: 递归函数 1、定义:函数在运行的过程中,直接和间接调用了自身,就是递归函数 python默认的最大递归深度为1000次 实例如下: import sys # 获取最大递归深度 print(sys.getrecursionlimit()) # 结果 1000 # 修改最大递归深度为2000 sys.setrecursionlimit(2000) print(sys.getrecurs
HammerZe
2022/03/25
5880
python 递归函数——从入门到懵逼
python基础
s="dzf".encode("utf-8") 为bytes类型 (将dzf转为bytes类型,utf-8编码方式)
Dean0731
2020/05/08
1.3K0
相关推荐
函数之递归[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档