
Python:递归与非递归实现斐波那契数列+汉诺塔实现
发布日期:2021-05-06 07:32:35
浏览次数:21
分类:精选文章
本文共 1065 字,大约阅读时间需要 3 分钟。
斐波那契数列是一个经典的递推数列,常用于测试递归和迭代算法的性能。以下是两种实现方式:
def fib1(n): # 递归方法实现 assert n >= 0 if n <= 1: return n else: return fib1(n-1) + fib1(n-2)def fib2(n): # 非递归方法实现 pre1 = 1 pre2 = 1 print(pre1, end=',') print(pre2, end=',') for i in range(n): tmp = pre1 pre1 = pre2 pre2 = tmp + pre2 print(pre2, end=',') # fib2的输出比fib1多两个是因为fib2初始值从1和1开始,而fib1返回n=0和n=1时的值为0和1 # 但在这个实现中,为了与fib1的输出对齐,已经调整了初始值
汉诺塔代码解析
汉诺塔是一种经典的递归问题,涉及将n个盘子从一个柱子移动到另一个柱子,仅能用中间柱子辅助。以下是代码实现:
def hanoi(n, x, y, z): if n == 1: print(f"{x} -> {z}") else: hanoi(n-1, x, z, y) # 将n-1个盘子从x移动到y print(f"{x} -> {z}") # 将第n个盘子从x移动到z hanoi(n-1, y, x, z) # 将n-1个盘子从y移动到z# 读取输入sum = int(input('请输入汉诺塔层数:'))hanoi(sum, 'X', 'Y', 'Z')
代码解读
- x、y、z:分别代表三个柱子名,'X'表示起始柱子,'Y'为中间柱子,'Z'为目标柱子。
- 递归逻辑:函数递归分解问题,将n个盘子分解为n-1个盘子、第n个盘子和剩下的n-1个盘子。
- 输出:每次移动盘子时会输出移动命令,方便监控过程。
技术细节
- 斐波那契数列:fib1使用递归实现,fib2采用迭代方式。fib2的输出比fib1多两个是因为初始值处理方式不同。
- 汉诺塔:代码遵循递归分解的思路,确保每次移动都遵循规则。
这些实现代码不仅展示了算法的逻辑,还通过简单的输出帮助调试和理解算法行为。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年03月28日 07时33分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java内存模型(JMM)
2019-03-06
AQS相关
2019-03-06
WCF学习之旅—第三个示例之一(二十七)
2019-03-06
java ThreadPoolExecutor初探
2019-03-06
Markdown进阶
2019-03-06
快速指数算法
2019-03-06
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2019-03-06
SpringCloud微服务(03):Hystrix组件,实现服务熔断
2019-03-06
Spring 框架基础(01):核心组件总结,基础环境搭建
2019-03-06
JavaEE基础(02):Servlet核心API用法详解
2019-03-06
SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
2019-03-06
Sentry快速开始并集成钉钉群机器人
2019-03-06
Docker 服务
2019-03-06
Cassandra数据建模
2019-03-06
Elasticsearch Web管理工具
2019-03-06
评论表聚集索引引起的评论超时问题
2019-03-06
Internet Explorer 10 专题上线
2019-03-06
云计算之路-阿里云上:0:25~0:40网络存储故障造成网站不能正常访问
2019-03-06