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中的len()函数的使用
Apr 07 Python
Python通过poll实现异步IO的方法
Jun 04 Python
使用Eclipse如何开发python脚本
Apr 11 Python
python程序控制NAO机器人行走
Apr 29 Python
Django框架封装外部函数示例
May 28 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
python 字符串追加实例
Jul 20 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
php实现读取内存顺序号
2015/03/29 PHP
理解JavaScript中的对象 推荐
2011/01/09 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
numpy返回array中元素的index方法
2018/06/27 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
什么是数组名
2012/05/10 面试题
异步传递消息系统的作用
2016/05/01 面试题
构造方法和其他方法的区别
2016/04/26 面试题
回门宴新郎答谢词
2014/01/12 职场文书
小学生竞选班干部演讲稿
2014/04/24 职场文书
单位收入证明范本
2015/06/18 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript