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实现的tab文件操作类分享
Nov 20 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python3 发送任意文件邮件的实例
Jan 23 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
python requests 测试代理ip是否生效
Jul 25 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
wxPython之wx.DC绘制形状
Nov 19 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
python 两种方法删除空文件夹
Sep 29 Python
Django展示可视化图表的多种方式
Apr 08 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项目的方法
2006/10/09 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
网页javascript精华代码集
2007/01/24 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
python实现ip地址的包含关系判断
2020/02/07 Python
python 弧度与角度互转实例
2020/04/15 Python
python如何查看网页代码
2020/06/07 Python
python list的index()和find()的实现
2020/11/16 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
《小草和大树》教学反思
2014/02/16 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
心得体会格式及范文
2016/01/25 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
浅谈JavaScript作用域
2021/12/06 Javascript