python递归函数的执行过程
举例:
def nove(n,a,b,c):
if n == 1:
print(a,'------------>',c)
else:
nove(n-1,a,c,b)
nove(1,a,b,c)
nove(n-1,b,a,c)
执行输出结果:
nove(3, 'A', 'B', 'C')
# A --> C
# A --> B
# C --> B
# A --> C
# B --> A
# B --> C
# A --> C
执行过程详解:
1 def nove(n, a='A', b='B', c='C'):
2 if n == 1:
3 return print(a, "->", c)
4 else:
5 nove((n-1), a, c, b)
6 print(a, "->", c)
7 nove((n-1), b, a, c)
8
9 nove(3)
第6行print(a, "->", c)
可以写做nove(1, a, b, c)
,个人感觉可以不用这么写,print(a, "->", c)这样可以让代码少跑两步。
开始运行nove( 3 )
:
nove 函数代入 ‘ 行9’ ( n = 3 )参数 (3, a='A', b='B', c='C')
第一步 执行 ‘行2 - 3’ if n == 1:......
:
n != 1
, ‘行2 - 3’越过
第二步 执行 ‘行4’else:
:
执行 ‘行5’, 第一次递归开始,((n-1), a, c, b)
回到函数最初代入(3, a='A', b='B', c='C')
,得出参数为(2, 'A', 'C', 'B')
,【!注意: 此时‘行1 ’(3, a='A', b='B', c='C')
在 ‘行5’ 递归回到函数最初运行后已改变为(2, a='A', b='C', c='B')
】
执行 ‘行2 - 3’ ,n != 1
, ‘行2 - 3’ 越过
- 执行
else:
- 执行 ‘行5’,将
((n-1), a, c, b)
代入(2, a='A', b='C', c='B')
,得出参数为(1, 'A', 'B', 'C')
,继续执行 ‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'A', 'B', 'C')
,即A -> C
- 回到 ’ 行5‘,继续执行 ‘行6’ ,将
(a, "->", c)
代入nove函数(2, a='A', b='C', c='B')
并输出,即A -> B
- 执行 ’行7‘,将
( (n-1), b, a, c)
代入(2, a='A', b='C', c='B')
得出参数为(1, 'C', 'A', 'B')
,继续执行 ‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'C', 'A', 'B')
,即C -> B
- 执行 ‘行5’,将
- 执行
第三步 执行 ‘行6’
print(a, "->", c)
:(a, "->", c)
代入nove函数(3, a='A', b='B', c='C')
并输出,即A -> C
第四步 执行 ’行7‘
nove((n-1), b, a, c)
:- 执行 ‘ 行7’ ,第二次递归开始,
((n-1), b, a, c)
代入(3, a='A', b='B', c='C')
得出参数为(2, 'B', 'A', 'C')
【!注意: 此时 ‘行1 ’(3, a='A', b='B', c='C')
在 ‘行7’ 递归回到函数最初运行后已改变为(2, a='B', b='A', c='C')
】- 执行 ‘行2 - 3’ ,
n != 1
, ‘行2 - 3’ 越过- 执行
else:
- 执行 ‘行5’,将
((n-1), a, c, b)
代入(2, a='B', b='A', c='C')
得出参数为(1, 'B', 'C', 'A')
,继续执行‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'B', 'C', 'A')
,即B -> A
- 回到 ’ 行5‘,继续执行 ‘行6’ ,将
(a, "->", c)
代入nove函数(2, a='B', b='A', c='C')
并输出,即B -> C
- 执行 ’行7‘,将
((n-1), b, a, c)
代入(2, a='B', b='A', c='C')
得出参数为(1, 'A', 'B', 'C')
,继续执行 ‘行2 - 3’,n == 1
返回输出:(a, "->", c)
代入(1, 'A', 'B', 'C')
,即A -> C
代码运行结束,输出结果为:
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
- 执行 ‘行5’,将
- 执行
- 执行 ‘行2 - 3’ ,
python递归函数的执行过程的更多相关文章
- Python程序的执行过程原理(解释型语言和编译型语言)
Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的. ...
- Python程序的执行过程 解释型语言和编译型语言
转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...
- 说说Python程序的执行过程
1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...
- python函数的执行过程
对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束 ...
- Python程序的执行过程
1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...
- 从底层简析Python程序的执行过程
摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追 ...
- 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法
引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...
- .pyc是个什么 python的执行过程
1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...
- Python内部执行过程
一.编译过程概述 当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户. 首先当用户键入代码交给Python处理的时候会先进行词法分析,例如用 ...
随机推荐
- Pressure on CTRM/ETRM systems to find arbitrage
https://www.bobsguide.com/guide/news/2019/Jul/22/pressure-on-ctrmetrm-systems-to-find-arbitrage/ For ...
- 微信H5页面分享获取JS-SDK
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 微信开发文档: 生成签名之前必须先了解一下jsapi_ti ...
- 【java异常】org.springframework.web.util.NestedServletException: Handler processing failed;Can't connect to X11 window server using 'localhost:10.0' as the value of th
tomcat工程中创建二维码失败.抛出异常Can't connect to X11 window server using 'localhost:10.0' as the value of th 因为 ...
- SpringBoot如何切换Redis默认库
一些闲扯的话 我们清楚,Redis 尽管提供了 16 个索引库,但是每个数据库之间是隔离互不共享的,客户端默认连接使用的是 0 号数据库 . 注意:上方情况是基于单机 Redis 的,在集群模式下是没 ...
- Python面向对象 | 初识
一.面向对象编程 类 : 具有相同属性和技能的一类事物 对象: 就是对一个类的具体的描述 实例化:类——>对象的过程 使用面向对象的好处: 使得代码之间的角色关系更加明确 增强了代码的可扩展性 ...
- Vue 实现点击展开收起
Vue 展开收起功能实现 之前写项目的时候提到了一个需求 展开/收起 所有内容的需求 .因之前一值是重构,自己写功能还是比较少的,于是网上搜了一下,发现很多东西其实是jq的功能 虽然可以拿过来用,但是 ...
- selenium篇之滑动验证码
一.介绍 现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码.它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以 ...
- centos 升级openSSH7.81
1.下载相关依赖包 [root@Log ~]# yum install -y gcc openssl-devel pam-devel rpm-build 2.下载安装包 wget http://ftp ...
- python中进程、线程、协程简述
进程 python中使用multiprocessing模块对进程进行操作管理 进程同步(锁.信号量.事件) 锁 —— multiprocessing.Lock 只要用到了锁 锁之间的代码就会变成同步的 ...
- PHP微信发红包简明教程
PHP微信发红包简明教程1首先进入公众号申请微信支付 申请成功账号密码会发到你指定的邮箱 是登陆商户平台的2 进入后申请发红包借口3 调用发红包接口 https://api.mch.weixin.qq ...