递归能够锻炼我们的逻辑能力和抽象能力。

递归过程中的每一次计算方法都是一样的。

以下是两道网友提出的问题,对于递归的练习非常有帮助。

第一道题目:

list = [{‘name’:’小红’,sub’:[{‘name’:’小明’,’sub’:[{‘name’:’小花’}]},{’name‘:’小黑’}]}]

这是一个嵌套列表,但是嵌套的可能有n层,如何运用递归函数得到列表中所有的“name”值,并且有层级关系的名字需要拼接起来,得到的结果是“[‘小红’,’小红’/’小明,’小红’/’小明/’小花’, ‘小红’/’小黑’]” 。

解题思路:

因为外层的名字要与内层名字拼接,所以每次获取外层的名字,都要作为参数传入内层,最外层参数默认为空字符串;每一次将外层名字与当前层名字拼接后,都判断是否存在下一层,如果存在则将下一层的列表和当前层的拼接结果作为参数进行递归,并将递归结果与当前结果列表合并。

示例代码:

lst = [{‘name’: ‘小红’, ‘sub’: [{‘name’: ‘小明’, ‘sub’: [{‘name’: ‘小花’}]}, {‘name’: ‘小黑’}]}]

def fun(lst, name=’’):

参数“name”为已从字典中取出的键值

result = []

每次递归的结果列表

for dic in lst:

从列表获取字典

    if name:

如果有上一次递归结果

        names = name + '/' + dic['name']

上一次递归结果连接当前字典“name”键的值

    else:names = dic['name']

直接将当前字典“name”键的值存入

    result.append(names)

结果列表中添加当前递归结果

    sub = dic.get('sub', None)

获取子级列表

    if sub:

如果存在子级列表

        result = result + fun(sub, names)

当前结果列表与子级结果列表合并

return result

返回每次递归结果列表

print(fun(lst))
第二道题目:

写出python程序,一定要利用递归函数,尽量不用for循环、while循环。

输入整数B代表进制数,再输入两个B进制的数,用列表list_a和list_b表示,输出list_a+list_b的B进制数结果,也可以用列表来表示。

例如,B=16,输入list_a=[10,9,9]和list_b=[9,9],相加后的十六进制结果是[11,3,2];如果B=11,相加后的结果是[1,0,8,7]。

解题思路:

要注意两点,一点是列表长度可能不一致,另外一点是相加之后大于进制数时需要进位1。

每一次递归,我们都取出两个列表的最后一个元素和进位数一起进行求和。

因为列表元素数量可能不一致,当只有一个列表有元素时,只取出有元素的列表最后一位与进位数求和。

如果列表都为空,存在进位数时,直接返回进位数,否则,返回空列表。

对于每一次递归计算出的和,分别获取进位数和余数,并将余数与外层递归结果合并,将进位数作为参数传入下一次递归。

示例代码:

list_a = [10, 9, 9]
list_b = [9, 9]
mod = 11

def fun(mod, lst_a, lst_b, carry=0):

carry为进位数

result = []

每次递归的计算结果列表

if lst_a and lst_b:

如果列表均不为空

    sum = lst_a[-1] + lst_b[-1] + carry

取出每个列表最后一个元素与上一层传入的进位数相加求和

    lst_a.pop(-1)

从列表中去除最后一个元素

    lst_b.pop(-1)

从列表中去除最后一个元素

elif lst_a:

如果只有lst_a列表不为空

    sum = lst_a[-1] + carry

列表最后一位元素与上一层传入的进位数相加求和

    lst_a.pop(-1)

从列表中去除最后一个元素

elif lst_b:

如果只有lst_b列表不为空

    sum = lst_b[-1] + carry

列表最后一位元素与上一层传入的进位数相加求和

    lst_b.pop(-1)

从列表中去除最后一个元素

else:

如果列表均为空

    if carry:

如果有进位数

        return [carry]

返回进位数

    else:  # 否则return []

返回空列表

carry = sum // mod

计算当前和按进制计算后的进位数

remainder = sum % mod

计算当前和按照进制计算后的余数

result = [remainder] + result

余数以列表形式与外层递归列表合并

return fun(mod, lst_a, lst_b, carry=carry) + result

进行下一层递归

【python教程入门学习】两道关于递归的练习题相关推荐

  1. 【python教程入门学习】普通人学python有意义吗

    普通人学python有意义吗?普通人能不能学习python语言,难不难,是否容易上手,学了python能做那些事情,能挣多少钱?这些问题是很多同学关心的问题,今天python教程入门学习就从小白同学的 ...

  2. 【python教程入门学习】学python要多久,0基础学python有多难

    学python要多久,0基础学python有多难,这是很多想学习python语言同学绕不开的问题,都害怕花完钱最终没有应有的回报!对于毫无经验0基础的同学来说学习python什么最重要,方向选对坚持下 ...

  3. 【python教程入门学习】第一个Pygame程序

    Pygame 作为一个入门级的游戏开发库,其实并不难学,只要掌握 Python 编程的相关知识就能很轻松地掌握它. Pygame 语法简单.明了,秉持了 Python 语言一贯的风格.同时,它作为一个 ...

  4. 【python教程入门学习】Python新年炫酷烟花秀代码

    先介绍下 Pygame 绘制烟花的基本原理,烟花从发射到绽放一共分为三个阶段: 1,发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同.颜色不同的点来模拟"向上发射" ...

  5. 【python教程入门学习】Python扑克牌21点游戏实例代码

    大家好,本篇文章主要讲的是Python扑克牌21点游戏实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览 废话还是说太多了 直接上代码 | `import` `random ...

  6. 【python教程入门学习】python能做什么

    python能做什么?[python教程入门学习]介绍,最近许多的朋友咨询,听说python很火,甚至可以超越JAVA,因此很想学这个python,但是不知道python能做什么,能完成一些什么项目呢 ...

  7. 【python教程入门学习】Python实现自动玩贪吃蛇程序

    这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学 实现效果 先看看效果 这比我手动的快多了,而且是单机的,自动玩没惹 ...

  8. 【python教程入门学习】Python零基础入门爬虫项目

    Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...

  9. 【python教程入门学习】零基础想转行学python,过来人提醒大家几点

    img 为了获得心仪的Offer,要不要接受HR的压价? 前不久,我被一大厂HR摆了一道,都准备签Offer了,但却压了3000的薪资. 拒绝offer的那一刻,我感到前所未有的迷茫和无力. 大厂碰壁 ...

最新文章

  1. R语言层次聚类模型示例
  2. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]...
  3. 2 时间格式化_U盘无法格式化怎么办 U盘无法格式化解决教程【详解】
  4. Linux常用编辑器使用:vi、vim、nano、gedit
  5. Ubuntu中vi / vim编辑器快捷操作
  6. 吴恩达DeepLearningCourse4-卷积神经网络
  7. MybatisCodeHelperNew-2.8.1-191-201插件使用
  8. 云服务器ECS共享标准型S6全新发布, 行业内最具性价比
  9. cdh 简介_CDH 1、CDH简介
  10. java安装 hello_安装JAVA步骤,并编写HELLOWORLD程序
  11. 安卓文本编辑器php cpp,开源的Android富文本编辑器
  12. 信息学奥赛一本通 1112:最大值和最小值的差 | OpenJudge NOI 1.9 05
  13. 2017.10.13 轮状病毒 失败总结
  14. 66元机票盲盒,去哪随机、日期随机:要不起!
  15. DDoS 攻击爆发!医疗在线教育成重点,代理攻击成常态
  16. tab页签切换----bootstrap
  17. Csharp四种简单的排序算法
  18. 项目介绍star原理_这个Python项目厉害了!多个实战案例教你分析时空数据处理...
  19. android sqlite 打包 xe,Delphi XE使用SQLite3
  20. 证明矩阵的秩=行秩=列秩

热门文章

  1. Good Bye 2021: 2022 is NEAR A-Integer Diversity(水题)
  2. .netcore 如何获取系统中所有session_ASP.NET Core微服务实战 一、二
  3. 打印出所有的水仙花数javascript_期末C语言特辑 水仙花数
  4. android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程
  5. python中字母用什么表示_python中字母与ascii码的相互转换
  6. data为long 怎么设置vue_vue--为什么data属性必须是一个函数
  7. jumpserver 重启mysql_jumpserver 常见错误解决
  8. python语言在大数据分析处理领域应用广泛_在大数据分析/挖掘领域,哪些编程语言应用最多...
  9. tkinter中text属性_python tkinter基本属性详解
  10. java按钮改变窗口大小_java – 当我们调整窗口大小时,Container中的元素如何调整?...