注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为8分钟。

递归编程练习题4:铺瓷砖

给定一个长度为N的区域,及4种不同长度的瓷砖:灰瓷砖(长为1格)、红瓷砖(长为2格)、绿瓷砖(长为3格)与蓝瓷砖(长为4格),求所有不同的铺满整个区域的方法数。

例如:当N=5时,共有15种铺满区域的方法,示意图如下:

铺瓷砖

输入格式:

一个自然数N。

输出格式:

一行数字,表示不同的方法总数。

输入样例:

5

输出样例:

15

解答:和Python数据结构与算法36:动态规划案例分析一节中博物馆大盗问题是类似,这是典型的要用到动态规划策略的问题,同时也可以用递归来解决此问题。

方法一:动态规划解决问题

与递归三定律类似,动态规划也有自己的“三要素”:最优子结构、边界和状态转移函数。

最优子结构——每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到(子问题的最优解能够决定这个问题的最优解)。

边界——问题最小子集的解(初始范围)。

状态转移函数——从一个阶段向另一个阶段过度的具体形式,描述的是两个相邻子问题之间的关系(递推式)。

参考代码如下:

def tiling(N):

'''

N:要铺瓷砖的区域的长度。

'''

num = 0 # 创建并初始化铺长度为N的瓷砖需要的方法种类。

all_methods = [0] * (N + 1) # 新建一个列表,记录每个长度用4种颜色的瓷砖铺的所有方法,初始化均为0。

tiles_length = [1, 2, 3, 4] # 4种颜色的瓷砖分别对应4种长度。

if N == 0: # 铺长度为0的瓷砖,只有1种方法。

return 1

elif all_methods[N] != 0:

return all_methods[N]

else:

# 遍历从0开始的每个长度用4种颜色的瓷砖铺的所有方法,并记录到列表all_methods当中。

for i in [t for t in tiles_length if t <= N]:

num = num + tiling(N - i)

all_methods[N] = num

return num

N = int(input())

print(tiling(N))

<<<15

方法二:递归解决问题。递归思路更直观一些。

# 递归算法解决铺瓷砖问题。

def tiling(N):

'''

N:要铺瓷砖的区域的长度。

'''

if N == 1: # 铺灰瓷砖(长度为1)的情况。

return 1

elif N == 2: # 铺红瓷砖(长度为2)的情况。

return 1 + tiling(N - 1)

elif N == 3: # 铺绿瓷砖(长度为3)的情况。

return 1 + tiling(N - 1) + tiling(N - 2)

elif N == 4: # 铺蓝瓷砖(长度为4)的情况。

return 1 + tiling(N - 1) + tiling(N - 2) + tiling(N - 3)

else:

return tiling(N - 1) + tiling(N - 2) + tiling(N - 3) + tiling(N - 4)

N = int(input())

print(tiling(N))

<<<15

To be continued.

python递归编程题_Python数据结构与算法41:递归编程练习题4:铺瓷砖相关推荐

  1. python编写代码运用递归画图形_python数据结构与算法 22 递归图形

    上节中我们已经知道有些问题,如果用递归解决变得非常容易.但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么.这一节我们引入几个例子,用递归的方法画几个有趣的图形 ...

  2. python基础刷题_数据结构与算法LeetCode刷题(Python)

    参考资料: 一.链表 1.  链表的必备知识要点(包括基础知识.刷题中使用的STL等知识) 2.  链表逆序(LeetCode 92 ,206. Reverse Linked List 1,2) 3. ...

  3. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...

    本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...

  4. python数据结构与算法40题_Python数据结构与算法40:递归编程练习题3:ASCII谢尔宾斯基地毯...

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 递归编程练习题3:ASCII谢尔宾斯基地毯 谢尔宾斯基地毯 谢尔宾斯基地毯是形如上图的正方形分形 ...

  5. python 进制转换_Python数据结构与算法——递归应用之进制转换

    高考加油 在前面的文章中堆栈也用于进制转换(存放余数).而递归也可以用于进制转换,有固定模式循环,并且可以规模越来越小的问题都可以转换成递归 栈与递归之间一定有点联系 整数转换成任意进制 日常运算都是 ...

  6. python数据结构与算法40题_Python数据结构与算法刷题(2)——挖掘机技术哪家强...

    前言 前文传送门: 正文 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人 ...

  7. python字符串操作编程题_python开发基础02-字符串操作方法练习题

    1.执行 Python 脚本的两种方式 python解释器 py文件  #!/usr/bin/env python 进入python解释器,便捷命令并执行 pycharm或其他pythonIDE sh ...

  8. 使用Python和C++的写数据结构和算法

    使用Python和C++的写数据结构和算法 1.数据结构和算法简介 2.数据结构 2.1 堆栈 2.2 队列 2.3 散列表 2.4 二叉树 2.5 线性搜索 2.6 二进制搜索 2.7 递归 2.8 ...

  9. 数据结构与算法之递归题目

    数据结构与算法之递归题目 目录 求n!的结果 汉若塔问题 打印字符串的全部子序列,包括空字符串 打印一个字符串的全部排序 1. 求n!的结果 public static long getFactori ...

最新文章

  1. 大讲台大数据特训学习笔记
  2. websocket学习笔记
  3. ASP.NET Core和json请求这样用真简单,axios、微信小程序得救了
  4. PHP的钩子实现解析
  5. leetcode45 跳跃游戏II 秒杀所有答案
  6. python mock_python mock基本使用
  7. 解决conda activate报错IMPORTANT: You may need to close and restart your shell after running ‘conda init‘
  8. VirtualBox虚拟机 四种网络接入模式
  9. 大数据调度工具之Oozie
  10. 简练软考知识点整理-中国制造2025
  11. Opencv学习笔记 超像素分割
  12. 软件如何实现屏幕共享?
  13. 九层之台,始于垒土;合抱之木,始于毫末;千里之行,始于足下!
  14. 个人税计算器(Java)
  15. 统信uos 没有通过系统安全验证,无法运行
  16. 用python画皮卡丘代码-用python画一只可爱的皮卡丘
  17. Redis Module 模块组件
  18. nagios安装使用指南
  19. 高性能数据库引擎 CoolHash 产品宣言 Fourinone4.0版新特性(转)
  20. ROS2零基础快速入门

热门文章

  1. python语音验证码识别_基于Python的手机语音验证码api调用代码实例
  2. ESP32-C3 学习测试 蓝牙 篇(五、添加 characteristic)
  3. 4k纸是几厘米乘几厘米_4k纸有多大?长宽各多少厘米?
  4. 09-实战拓展(ico图标、图标字体、网站优化三大标签、logo优化、过渡transition、:focus获取元素焦点)
  5. 【热门】女孩取名:女孩名字带歆什么寓意
  6. Django项目部署至华为云服务器
  7. 人机协作机器人发展趋势_协作机器人未来发展趋势怎么样?
  8. 300元内,此耳机是首选。不亏千人好评,对的起你的耳朵。
  9. html表格标题居于标题左侧,css如何设置表格标题(caption标签)的位置
  10. python色卡识别_用Python帮小姐姐选口红,人人都是李佳琦