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处理的时候会先进行词法分析,例如用 ...
随机推荐
- Debian 安装 yum
sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install yum
- three.js 加载STL文件
注意: TrackballControls.js 和 TDSLoader.js 都引用了 three.module.js,特别注意引用的路径 比如: 直接代码咯 <!DOCTYPE html&g ...
- django -- 安装django
安装 通过cmd进行安装 pip3 install django==1.11.11 创建django项目 通过命令行进行创建 下面的命令创建了一个名为"mydjango"的Djan ...
- 洛谷p3916图的遍历题解
题面 思路: 反向建边,dfs艹咋想出来的啊 倒着遍历,如果你现在遍历到的这个点已经被标记了祖先是谁了 那么就continue掉 因为如果被标记了就说明前面已经遍历过了 而我们的顺序倒着来的 前边的一 ...
- Set和Multiset 怎么用咧↓↓↓
转自:[C++ STL]Set和Multiset - Memset - 博客园https://www.cnblogs.com/ChinaHook/p/6985444.html (对字体进行了略微的修改 ...
- Spring Boot 知识笔记(Filter过滤器)
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 htm ...
- JUC锁框架_AbstractQueuedSynchronizer详细分析
AQS是JUC锁框架中最重要的类,通过它来实现独占锁和共享锁的.本章是对AbstractQueuedSynchronizer源码的完全解析,分为四个部分介绍: CLH队列即同步队列:储存着所有等待 ...
- jvm参数设置实例
- SCIE和SCI
SCI和SCIE(SCI Expanded)分别是科学引文索引及科学引文索引扩展版(即网络版),主要是收录自然科学.工程技术领域最具影响力的重要期刊,包括2000多种外围刊. SCIE和SCI一样吗? ...
- kali 更改图标村大小
1.“设置” --> "通用辅助功能" --> "大号字体" 2.在终端中输入 “gnome-tweaks” 打开 优化 --> 扩展 -- ...