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 26 Python
Python实现的rsa加密算法详解
Jan 24 Python
python sys.argv[]用法实例详解
May 25 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
Jun 17 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
Pytorch to(device)用法
Jan 08 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
Apr 10 Python
区分python中的进程与线程
Aug 13 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
pandas进行数据输入和输出的方法详解
Mar 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调用.NET的WebService 简单实例
2015/03/27 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
开源的javascript项目Kissy介绍
2014/11/28 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
python实现SOM算法
2018/02/23 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
史上最全面的Java面试题汇总!
2015/02/03 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2014年转正工作总结
2014/11/08 职场文书
死亡赔偿协议书
2015/01/28 职场文书
学习党章心得体会2016
2016/01/15 职场文书
话题作文之诚信
2019/11/28 职场文书