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中的__init__和__new__
Mar 12 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
python截取两个单词之间的内容方法
Dec 25 Python
Python闭包思想与用法浅析
Dec 27 Python
django表单的Widgets使用详解
Jul 22 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
如何基于python把文字图片写入word文档
Jul 31 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
Python字符串的转义字符
Apr 07 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遍历二维数组的代码
2011/04/22 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
python 提取文件的小程序
2009/07/29 Python
Python多线程学习资料
2012/12/19 Python
详解python单例模式与metaclass
2016/01/15 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
六道php面试题附答案
2014/06/05 面试题
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
2014年元旦活动方案
2014/02/15 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
三人合伙协议书范本
2014/10/29 职场文书
小学优秀学生评语
2014/12/29 职场文书