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实现堆栈与队列的方法
Jan 15 Python
python中的编码知识整理汇总
Jan 26 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
python获取array中指定元素的示例
Nov 26 Python
python程序文件扩展名知识点详解
Feb 27 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
python如何爬取网页中的文字
Jul 28 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 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初学者(入门学习经验谈)
2010/10/12 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
python使用tornado实现登录和登出
2018/07/28 Python
python实现手势识别的示例(入门)
2020/04/15 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
大学军训感想
2014/02/12 职场文书
结婚喜宴主持词
2014/03/14 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
食品安全汇报材料
2014/08/18 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
学生病假条范文
2015/08/17 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers