源自:7-5 Python之递归函数

对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。

#if条件不成立的省略

# { 看做递归开始

# } 看做递归结束

move(4, a, b, c):{  #实际数值(4, A, B, C)

move(3, a, c, b):{            #c,b调换,实际数值(3, A, C, B), 将这四个值带入move(3, a, b, c)递归1

move(2, a, c, b):{        #c,b调换,实际数值(2, A, B, C), 将这四个值带入move(2, a, b, c)递归2

move(1, a, c, b):{    #c,b调换,实际数值(1, A, C, B), 将这四个值带入move(1, a, b, c)递归3

if n == 1:        #此时n==1,if条件成立

print(a, '-->',c) #这是第一次打印A-->B

}                     #最近的一次递归3完成,回到递归2,实际数值(2, A, B, C)

print(a, '-->', c)    #这是第二次打印A-->C

move(1, b, a, c):{    #a,b调换,实际数值(1, B, A, C), 将这四个值带入move(1, a, b, c)递归4

if n == 1:

print(a, '-->', c)#这是第三次打印B-->C

}                     #最近的一次递归4完成,回到递归2,实际数值(2, A, B, C)

}                         #最近的一次递归2完成,回到递归1,实际数值(3, A, C, B)

print(a, '-->', c)        #这是第四次打印A-->B

move(2, b, a, c):{        #a,b调换, 实际数值(2, C, A, B), 将这四个值带入move(2, a, b, c)递归5

move(1, a, c, b):{    #c,b调换, 实际数值(1, C, B, A), 将这四个值带入move(1, a, b, c)递归6

if n == 1:

print(a, '-->', c)#这是第五次打印C-->A

}                     #最近的一次递归6完成,回到递归5,实际数值(2, C, A, B)

print(a, '-->', c)    #这是第六次打印C-->B

move(1, b, a, c):{    #a,b调换, 实际数值(1, A, C, B), 将这四个值带入move(1, a, b, c)递归7

if n == 1:

print(a, '-->', c)#这是第七次打印A-->B

}                     #最近的一次递归7完成,回到递归5,实际数值(2, C, A, B)

}                         #最近的一次递归5完成,回到递归1,实际数值(3, A, C, B)

}                             #最近的一次递归1完成,原参数中的move(n - 1, a, c, b)递归全部完成,实际数值(4, A, B, C)

print(a, '-->', c)  #这是第八次打印A-->C,下面跟上面同样的方式去理解,就不写了,太累了。

move(3, b, a, c):{

move(2, a, c, b):{

move(1, a, c, b):{

if n == 1:

print(a, '-->', c)   #这是第九次打印

}

print(a, '-->', c)#这是第10次打印

move(1, b, a, c):{

if n == 1:

print(a, '-->', c)#这是第11次打印

}

}

print(a, '-->', c)   #这是第12次打印

move(2, b, a, c):{

move(1, a, c, b):{

if n == 1:

print(a, '-->', c)   #这是第13次打印

}

print(a, '-->', c)#这是第14次打印

move(1, b, a, c):{

if n == 1:

print(a, '-->', c)#这是第15次打印

}

}

}

}

提问者:倚剑生死幻梦情

2018-12-02 17:48

sas 检测到开型代码语句的递归_对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。...相关推荐

  1. 零基础零代码,也能一周学会动态报表?这个方法很多人都不知道

    因为我是处于IT行业的,所以身边有很多经常做报表分析的人,每当老板一有问题,他们就会马上打开Excel,花上好几个小时拉一张表格,汇汇总.取取平均数,偶尔还会加点不同颜色,做做动态图表,美其名曰&qu ...

  2. 如何开搓饵不掉钩_钓鱼技巧!学会这4步!看懂搓饵装钩方法!

    原标题:钓鱼技巧!学会这4步!看懂搓饵装钩方法! 搓饵是学习中的必修课,搓饵看似简单,但是真正搓好并不容易,怎样做到鱼饵不散,下水雾化效果也好? 现在将搓饵的一些心得体会和注意事项介绍给各位钓友,希望 ...

  3. 深度学习目标检测常用工具型代码:对检测出来的结果单独进行nms操作

    p.s. 这里的例子我说的都是航空影像目标,所以大家考虑的时候都要考虑成俯视图的状态. 多目标检测的时候,有容易发生拥挤的类别,比如小汽车,也有不易拥挤的类别,比如篮球场.所以需要不同的nms阈值,而 ...

  4. 使用 Kotlin 写一段函数式的递归遍历树结构,处理节点的代码

    fun visitNavigation(navData: List<NavigationNodeVO>?, visitor: (NavigationNodeVO) -> Unit) ...

  5. 烧录引导程序出错_自学「单片机」时许多人都绕不开的一个词「烧录」,你了解多少?...

    自学单片机是一场苦旅,这在第一次面对复杂的烧录界面的时候就会有深刻的感受,面对这么多参数的界面,该如何让自己苦心编写的程序运行在单片机上呢? 本文要说的是在自学单片机时,所绕不开的一个关键词" ...

  6. 很多人都不知道,其实博客园给我们博客开了二级域名

    如题.一直都在邮件签名里写自己的博客地址为: http://www.cnblogs.com/datacool:直到有天突然发现使用:http://datacool.cnblogs.com也可以访问.不 ...

  7. 程序员都看不懂的代码

    ############字符或特殊符号横向条形图输出################################## # 4大互联网公司市值信息列表 chart = [['alibaba', 45 ...

  8. 【开发者成长】每个人都在编写草率代码

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 所有开发人员都认为自己写的代码完全能让人看懂,然而,他们却无法解密彼此的代码(更不用说维护代码了) ...

  9. 未来属于无代码分析:每个人都能成为数据科学家

    全文共1769字,预计学习时长6分钟 图源:unsplash 互联网诞生早期,创建网站是一门高端技术活.而现在,Wordpress这样的无代码工具让每个人都能迅速地创建一个网站.如今已有超50亿的网站 ...

最新文章

  1. 支持百万级TPS,Kafka是怎么做到的?答案藏在这10张图里
  2. 无线节能信标核心板V4-测试-2021-4-3
  3. Hadoop For Windows
  4. L 1 ,L 2 参数正则化
  5. Android下EditText中的字体不统一问题
  6. java swing 一闪而过_Java代码,为什么图形会一闪而过,怎么修改?
  7. [Android] Context应该怎么写?
  8. 蓝桥杯 入门训练 序列求和
  9. Localdatetime的坑
  10. 事业和家庭本就不能两全
  11. 小型项目的微服务架构指南
  12. Thinkpad T470 内置电池问题
  13. 对校招生培养工作的建议_19、贵单位对我院学生培养工作有何建议:
  14. java说的tps pv是什么_你知道服务器PV、TPS、QPS是怎么计算出来的吗?
  15. matplotlib 辅助线
  16. DDN周报|3月19日-3月25日
  17. 原创|推荐一个月入过万的副业项目!
  18. android 虚拟导航按钮(NavigationBar)可手动隐藏开发
  19. LINUX KALI初级渗透XP系统入门学习总结(一)
  20. leetcode 1737 解题思路及注释code 贪心

热门文章

  1. POJ 3168 排序+扫描
  2. onDraw(canvas)和dispatchDraw(canvas)方法
  3. 2月第3周全球五大顶级域名总量净减6.1万个 降幅明显
  4. genymotion+android studio Android 搭建开发环境
  5. 现任明教教主vsphere视频共享部分新共享连接
  6. 通用DbContext封装
  7. 51Nod 1058 N的阶乘的长度
  8. linux 隐藏显示终端光标
  9. 3G手机Android应用开发视频教程_黎活明老师的视频(第五天课程)总共有八天课程...
  10. 小白设计模式:策略模式