Python 递归函数详解及实例


Posted in Python onDecember 27, 2016

Python 递归函数

如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要付出一定的努力去理解和创建.
我们会以一个简单的例子开始:写一个函数求一个自然数中所有数字的和.在设计递归函数的时候,我们会寻找能把问题分解成简单的问题的方法.在这道题中,运算符%和//可以用来把一个数分成两部分:最低位和不包含最低位数字两部分.

Python 递归函数详解及实例

18117的数字和为:1+8+1+1+7=18.这样我们就可以分割这个数.把这个数分割成最低位7和不包含最低位数字的和1+8+1+1=11.这种分割方法给我们提供了一个算法:通过最低位n%10与n//10的数字之和相加来计算数n的数字之和.这种方法存在特殊情况:如果一个数只有一位,那么它的数字之和就是它本身.这个算法可以用递归函数实现.

def sum_digit(n):
  """return the sum of the digit of positive integer n."""
  if n < 10:
    return n
  else:
   last = n % 10
   all_but_last = n // 10
   return sum_digit(all_but_last) + last

函数sum_digit的定义是完整和正确的,即使sum_digit函数在自身的函数体里被调用.

这样求一个数的数字之和的问题就被分解成了两部分:求除去最低位部分数字之和,然后加上最低位.这两个步骤全都比原问题要简单.这个函数是递归的,因为第一步的问题和原问题是相同类型的.也就是说,sum_digit的确实是我们需要去实现自然数数字求和的函数.

Python 递归函数详解及实例

我们可以理解这个递归函数是怎样使用计算环境模型成功应用的.它 不需要任何新的规范.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
Python splitlines使用技巧
Sep 06 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
python实现3D地图可视化
Mar 25 Python
Python参数传递及收集机制原理解析
Jun 05 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
python 解决函数返回return的问题
Dec 05 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 Python
python实现二维码扫码自动登录淘宝
Dec 27 #Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 #Python
Python中如何获取类属性的列表
Dec 26 #Python
Python中强大的命令行库click入门教程
Dec 26 #Python
Python快速从注释生成文档的方法
Dec 26 #Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 #Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 #Python
You might like
php代码审计比较有意思的例子
2014/05/07 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
php数据序列化测试实例详解
2017/08/12 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python实现最速下降法
2020/03/24 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
理工科学生的自我评价
2013/12/15 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
学校社会实践活动总结
2014/07/03 职场文书
单位作风建设自查报告
2014/10/23 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
开天辟地观后感
2015/06/09 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript