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中字符串的格式化方法小结
May 03 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
用python写扫雷游戏实例代码分享
May 27 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
python生成n个元素的全组合方法
Nov 13 Python
python事件驱动event实现详解
Nov 21 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
Python把图片转化为pdf代码实例
Jul 28 Python
超级详细实用的pycharm常用快捷键
May 12 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
smarty模板中拼接字符串的方法
2014/02/14 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
Bootstrap select多选下拉框实现代码
2016/12/23 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
python自定义异常实例详解
2017/07/11 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python中自带的三个装饰器的实现
2019/11/08 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
python numpy实现rolling滚动案例
2020/06/08 Python
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
《三顾茅庐》教学反思
2014/04/10 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
材料化学专业求职信
2014/07/15 职场文书
动物科学专业求职信
2014/07/27 职场文书
金融保险专业求职信
2014/09/03 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
会计师事务所实习证明
2014/11/16 职场文书
篮球赛新闻稿
2015/07/17 职场文书