Python学习笔记__2.4章 递归函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python学习笔记__2.4章 递归函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1399字,纯文字阅读大概需要2分钟。
内容图文
# 这是学习廖雪峰老师python教程的学习笔记
在函数内部,可以调用其他函数。 如果一个函数在内部调用自身本身,这个函数就是递归函数。
使用递归函数写一个阶乘函数:
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
计算过程:
===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120
例题
汉诺塔的移动可以用递归函数非常简单地实现。
请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法,例如:
# -*- coding: utf-8 -*-
def move(n, a, b, c):
if n==1:
print('move',a,'-->',c) #圆盘个数为1时,从a移动到c即可完成,用来终止递归
else:
move(n-1,a,c,b) #把除了a柱子最下的一个圆盘以外的其他圆盘,都移动到b柱子
move(1,a,b,c) #把a柱子最下的圆盘,移动到c柱子
move(n-1,b,a,c) #把b柱子上的n-1个盘子,全部移动到c柱子
解析:
n==1 时,print 的是 a的值 ——》 c的值
首先 区分 位置 和 值的关系。 这个函数在不断的调换各 位置 对应的 值,理解a,b,c 和其对应位置的关系
那么,当n=3时,以大写字母表示位置,小写字母表示 真正的值
move(3,a,b,c)此时【A】=【a】,【B】=【b】,【C】=【c】
然后:
move(2,a,c,b) # 将b,c的值调换了,此时【A】=【a】,【B】=【c】,【C】=【b】
move(1,a,c,b) # 又将 b,c的值调换回来了 a-》c,此时【A】=【a】,【B】=【b】,【C】=【c】
move(1,a,b,c) # 此时【A】=【a】,【B】=【c】,【C】=【b】。故 a—》b
move(1,b,a,c) # 此时【A】=【c】,【B】=【a】,【C】=【b】。故 c—》b
move(1,a,b,c) # 此时【A】=【a】,【B】=【b】,【C】=【c】。故 a—》c
move(2,b,a,c) # 此时【A】=【b】,【B】=【a】,【C】=【c】。故 c—》b
move(1,a,c,b) # 此时【A】=【b】,【B】=【c】,【C】=【a】。故 b—》a
move(1,a,b,c) # 此时【A】=【b】,【B】=【a】,【C】=【c】。故 b—》c
move(1,b,a,c) # 此时【A】=【a】,【B】=【b】,【C】=【b】。故 a—》c
原文:http://blog.51cto.com/12758568/2115626
内容总结
以上是互联网集市为您收集整理的Python学习笔记__2.4章 递归函数全部内容,希望文章能够帮你解决Python学习笔记__2.4章 递归函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。