python使用递归思想处理问题
来源:互联网 发布:百度竞价数据分析案例 编辑:程序博客网 时间:2024/06/05 04:04
今天我们主要学习使用递归思想处理,斐波那契数列,打印文件层级结构
,汉诺塔小游戏。
递归说的稍微简点就是函数调用自身的一种方法,哪有人说,自己调用自己那不就死循环的了吗,那就需要我们自己设定结束条件,我个人认为递归思想你只要把开头和结束条件理清了思路,中间的那大部分就是一遍又一遍的调用自身。先来看一下斐波纳挈数列,我们先是用循环在使用递归思想来打印:
def fab(n): a = 0 b = 1 while n > 0: if a == 0 or b == 1: print(1,end= ' ') a, b = b, a + b n -= 1 else: print(b, end= ' ') a, b = b, a + b n -= 1 我们打印一下5以内的斐波纳挈数列: fab(10) G:\python\python.exe G:/Pyproject/day115/test3.py1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 Process finished with exit code 0
我们在使用递归思想打印斐波纳挈数列:
def fab(n): if n == 2 or n == 1: return 1 else: return fab(n - 1) + fab(n - 2)for i in range(1, 21): print(fab(i), end= ' ')我们打印二十以内的斐波纳挈数列G:\python\python.exe G:/Pyproject/day115/test3.py1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 Process finished with exit code 0
接下来我们使用递归思想来实现打印 文件目录结构层级的打印,我们还是先用循环来解决问题:
import osdef get_all(path): temp = [path] while len(temp): new_path = temp.pop() L = os.listdir(new_path) for name in L: new_name = os.path.join(new_path, name) if os.path.isdir(new_name): print('目录:', new_name) temp.append(new_name) else: print('文件:', new_name)get_all(r'G:\blogworkspace\blogproject\comments')来看实现结果:G:\python\python.exe G:/Pyproject/day115/test2.py文件: G:\blogworkspace\blogproject\comments\admin.py文件: G:\blogworkspace\blogproject\comments\apps.py文件: G:\blogworkspace\blogproject\comments\forms.py目录: G:\blogworkspace\blogproject\comments\migrations文件: G:\blogworkspace\blogproject\comments\models.py文件: G:\blogworkspace\blogproject\comments\tests.py文件: G:\blogworkspace\blogproject\comments\urls.py文件: G:\blogworkspace\blogproject\comments\views.py文件: G:\blogworkspace\blogproject\comments\__init__.py目录: G:\blogworkspace\blogproject\comments\__pycache__文件: G:\blogworkspace\blogproject\comments\__pycache__\admin.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\forms.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\models.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\urls.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\views.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\__init__.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\migrations\0001_initial.py文件: G:\blogworkspace\blogproject\comments\migrations\__init__.py目录: G:\blogworkspace\blogproject\comments\migrations\__pycache__文件: G:\blogworkspace\blogproject\comments\migrations\__pycache__\0001_initial.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\migrations\__pycache__\__init__.cpython-36.pycProcess finished with exit code 0
接着我们使用递归来实现:
import osdef get_all(path): L = os.listdir(path) for name in L: new_path = os.path.join(path, name) if os.path.isdir(new_path): print('目录:', new_path) get_all(new_path) else: print('文件:', new_path)get_all(r'G:\blogworkspace\blogproject\comments')打印结果是:G:\python\python.exe G:/Pyproject/day115/test2.py文件: G:\blogworkspace\blogproject\comments\admin.py文件: G:\blogworkspace\blogproject\comments\apps.py文件: G:\blogworkspace\blogproject\comments\forms.py目录: G:\blogworkspace\blogproject\comments\migrations文件: G:\blogworkspace\blogproject\comments\migrations\0001_initial.py文件: G:\blogworkspace\blogproject\comments\migrations\__init__.py目录: G:\blogworkspace\blogproject\comments\migrations\__pycache__文件: G:\blogworkspace\blogproject\comments\migrations\__pycache__\0001_initial.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\migrations\__pycache__\__init__.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\models.py文件: G:\blogworkspace\blogproject\comments\tests.py文件: G:\blogworkspace\blogproject\comments\urls.py文件: G:\blogworkspace\blogproject\comments\views.py文件: G:\blogworkspace\blogproject\comments\__init__.py目录: G:\blogworkspace\blogproject\comments\__pycache__文件: G:\blogworkspace\blogproject\comments\__pycache__\admin.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\forms.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\models.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\urls.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\views.cpython-36.pyc文件: G:\blogworkspace\blogproject\comments\__pycache__\__init__.cpython-36.pycProcess finished with exit code 0
最后我们来看一下汉诺塔游戏:
def hanoi(n, x, y, z): if n == 1: print(x, ' --> ', z) else: hanoi(n-1, x, z, y) # 将前n-1个盘子从x移动到y上 print(x, ' --> ', z) # 将最底下的最后一个盘子从x移动到z上 hanoi(n-1, y, x, z) # 将y上的n-1个盘子移动到z上n = int(input('请输入汉诺塔的层数:'))hanoi(n, 'X', 'Y', 'Z')有x y z三个柱子,箭头指向表示从哪转移哪我们输入三,看一下执行结果:请输入汉诺塔的层数:3X --> ZX --> YZ --> YX --> ZY --> XY --> ZX --> ZProcess finished with exit code 0
阅读全文
0 0
- python使用递归思想处理问题
- 由递归思想处理问题的基本原则
- 递归思想的使用之汉罗塔问题
- 递归思想:汉诺塔问题
- 约瑟夫问题与递归思想
- 递归思想解决小问题
- 递归思想解决经典问题
- 生兔子问题(递归思想)
- 递归思想----解决饮料问题
- 使用递归思想求n!
- 整数划分问题(python)--递归 and 动态规划(m个盘里放n个苹果思想类似)
- 使用Python递归对文件进行相关处理
- jstl处理递归问题
- 递归问题的处理
- 用递归思想解决河内塔问题
- 用递归思想解迷宫问题
- 从递归算法思想解析汉诺塔问题
- 递归思想解决汉诺塔的问题
- Spring orm +Spring data jpa 入门
- InputStream和OutputStream
- C语言位运算符:与、或、异或、取反、左移和右移
- 深度学习框架Keras学习系列(三):Keras神经网络框架
- vue2+iview+require实现AMD模式下的组件化开发、按需加载
- python使用递归思想处理问题
- BZOJ 4006 管道连接(最小斯坦纳树+状压DP)
- caffe_('delete_net', self.hNet_self);
- java.lang.NoSuchMethodError和kafka.common.OffsetOutOfRangeException(Spark)
- python刷题日记4--Roman to Integer
- 剑指Offer(二)替换空格
- Redis入门实例(Redis+Sprint+maven创建工程)
- javaweb实践项目(2)
- 最容易读进去的深度学习科普贴