举例:

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
  • 第三步 执行 ‘行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

python递归函数的执行过程的更多相关文章

  1. Python程序的执行过程原理(解释型语言和编译型语言)

    Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的. ...

  2. Python程序的执行过程 解释型语言和编译型语言

    转载地址:http://blog.csdn.net/lujiandong1/article/details/50067655 1. Python是一门解释型语言? 我初学Python时,听到的关于Py ...

  3. 说说Python程序的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  4. python函数的执行过程

    对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束 ...

  5. Python程序的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  6. 从底层简析Python程序的执行过程

    摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追 ...

  7. 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法

    引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...

  8. .pyc是个什么 python的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  9. Python内部执行过程

    一.编译过程概述 当我们执行Python代码的时候,在Python解释器用四个过程“拆解”我们的代码,最终被CPU执行返回给用户. 首先当用户键入代码交给Python处理的时候会先进行词法分析,例如用 ...

随机推荐

  1. 踩iviewui中Tabs 标签页数据绑定坑

    今天小颖要实现点击Tabs 标签页中每个标签,并动态获取当前点击的标签值. 一句话说不清楚,那就看动态图吧 小颖一开始看官网写的代码是: <template> <Tabs :valu ...

  2. 洛谷p1776宝物筛选

    宝物筛选 多重背包问题 物品数目已知 可以枚举每个物品 当做01背包来做 不过会超时 此时需要二进制拆分来优化 分解成新的物品 再跑一遍01背包即可 //二进制拆分+01背包 //设f[j]表示前i件 ...

  3. es6引用模块import后面加上花括号{}和不加花括号的区别

    在使用import语法引用模块时,如何正确使用{} 例如:有两个文件,home.js.user.js 当需要在home.js中引入user.js的时候 //home.js import user fr ...

  4. kubernetes 中遇见的一些坑(持续更新)

    一.官网镜像无法下载 解决方法:需要翻墙 配置docker翻墙机: cat /usr/lib/systemd/system/docker.service   [Service] Environment ...

  5. 20165214 2018-2019-2 《网络对抗技术》Exp8 Web基础 Week11—12

    <网络对抗技术>Exp8 Web基础 Week11-12 一.实验目标与内容 1.实践内容 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

  6. Java基础之十六 数组

    数组:可以创建并组装它们,通过使用整型索引值访问它们的元素,并且它们的尺寸不能改变. 16.1 数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力. 数组是一种效率 ...

  7. docker-compose可持续集成之jenkins

    1.下载docker-compose curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-co ...

  8. CentOS7 CPU 降频问题

    CentOS7 系统默认的 CPUPOWER 策略是 powersave 节能模式,Google 了非常多的资料,一直没有找到解决办法,现在分享一下. 执行: tuned-adm profile th ...

  9. mapreduce 函数入门 三

    一.mapreduce多job串联 1.需求 一个稍复杂点的处理逻辑往往需要多个 mapreduce 程序串联处理,多 job 的串联可以借助 mapreduce 框架的 JobControl 实现 ...

  10. Oracle GoldenGate 同步数据至Hbase

    该方法没试过,先记下再说 1.软件版本说明: Goldengate 12c 12.2.0.1 for Oracle(源端) Goldengate 12c 12.3.0.1 for Bigdata (目 ...