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脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python微信库:itchat的用法详解
Aug 14 Python
Python中一些深不见底的“坑”
Jun 12 Python
ipad上运行python的方法步骤
Oct 12 Python
python实现批量文件重命名
Oct 31 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
django配置app中的静态文件步骤
Mar 27 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
May 13 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
python实现的web监控系统
Apr 27 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
详解vue axios中文文档
2017/09/12 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
React 实现车牌键盘的示例代码
2019/12/20 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
投标授权委托书范文
2014/08/02 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
QT与javascript交互数据的实现
2021/05/26 Javascript
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
Python利用FlashText算法实现替换字符串
2022/03/31 Python