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入门篇之编程习惯与特点
Oct 17 Python
老生常谈python之鸭子类和多态
Jun 13 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
Python中logging实例讲解
Jan 17 Python
python多线程http压力测试脚本
Jun 25 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
Python模块的制作方法实例分析
Dec 21 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 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超级全局变量数组小结
2012/10/04 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
vue的路由映射问题及解决方案
2019/10/14 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
Windows下PyMongo下载及安装教程
2015/04/27 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
架构师岗位职责
2013/11/18 职场文书
团代会主持词
2014/04/02 职场文书
导航工程专业自荐信
2014/09/02 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
python实现监听键盘
2021/04/26 Python
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python