这是从林海峰博客里面copy的。很好的解释了,python函数的递归。

那什么是递归?

在函数内部,可以调用其他函数。如果在调用一个函数的过程中直接或间接调用自身本身

递归的样子

def digui(n):

print(n)

digui(n)

digui(10)

这个函数是无休止进行下去的,如何停止?

所以我们需要利用函数的返回值——return

简单举例递归

初识递归

def fan(n):

# print(n)

if int(n / 2) == 0:

return n

res=fan(int(n / 2))

return res

v=fan(5)

print(v)

1.fan(5)——调用函数fan,n=5

2. print(n)——打印5,表示n=5

3.if int(n / 2) == 0:——判断5/2是否为0,不满足

4. res=fan(int(n / 2))——执行res,fan(2)*取整*

5.fan(2)——执行fan(2)

6.print(2)——打印2,表示n=2

7.if int(n / 2) == 0:——判断2/2是否为0,不满足

8.res=fan(int(n / 2))——执行res,fan(1)

9.fan(1)——执行fan(1)

10.print(1)——打印1,表示n=1

11.if int(n / 2) == 0:——判断1/2是否为0,*取整*,满足

12.return n——返回n,n现在等于1

13.思考:n等于1返回的历程

是直接返回到fan(5)?还是先返回到fan(2),fan(2)得到一个返回值,fan(2)再返回到fan(5)

用更简单的例子来说就是:

假如我是一个班级的学生,我想在我的班找一本书。

我问同学A:“同学你知道书在什么地方?”

A回答:“我不知道,我帮你问问B”

A问B:“同学你知道书在什么地方?”

B回答A:“我不知道,我帮你问问C”

B问C:”同学你知道书在什么地方?”

C回答B:“书在书架的最下面”

B现在知道书在什么地方,B就告诉A,然后A就告诉我。

完美理解递归

students_list=['A','B','C','D']

def fund_book(students_list):

if len(students_list)==0:

return '没有人知道书在什么地方'

student=students_list.pop(0)

if student=='C':

return'{0}说:我知道,书放在书架最下面'.format(student)

print('同学{0},你知道书在哪里?'.format(student))

print('{0}回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问{1}'.format(student,students_list))

res=fund_book(students_list)

print('%s问的结果是: %res' % (student, res))

return res

v=fund_book(students_list)

print(v)

总结

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

彻底理解python递归_如何最简单、通俗地理解Python的递归?相关推荐

  1. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

  2. python人工智能_人工智能人才缺口千万!学Python抓住风口机会

    前不久教育界的一个消息,引发了广泛的关注. 今年9月,浙江三到九年级信息技术课将替换新教材,八年级将新增Python课程内容.新高一信息技术编程语言由VB替换为Python,大数据.人工智能.程序设计 ...

  3. cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤

    在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格  调试好的python文件路径 或者python 空格  将python文件拖入cmd ...

  4. 初学者不建议月python吗_为什么我不建议你将python作为入门编程语言

    现在流行的编程语言里,python的热度可谓是热的通红,python以其短小精悍的语法.以其高效的开发,简单入门作为亮点,迅速的在各个领域占有一席之地. 然而,无论你说python有多好,我都不建议你 ...

  5. python人才_【北软互联】上海python人才外派|上海python程序员人力外包|上海python工程师开发驻场|上海python软件劳务派遣公司...

    python人才简述 python是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此python语言具有功能强大和简单易用两个特征.python ...

  6. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

  7. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

  8. 在线python视频教程_【好程序员】2019 Python全套视频教程2

    2019千锋好程序员全新Python教程,深入浅出的讲解Python语言的基础语法,注重基本编程能力训练,深入解析面向对象思想,数据类型和变量.运算符.流程控制.函数.面向对象.模块和包.生成器和迭代 ...

  9. termux使用教程python手机_安装Termux的手机上运行Python

    原博文 2018-10-15 12:23 − 1. Termux 终端 Android是一个单用户图形化系统,功能主要以应用的形式呈现给用户,因此在系统上我们无法直接获取终端,更是无法直接调用系统自带 ...

  10. python 脑洞_从说韩语到写Python,这个数据媛的脑洞有毒吧

    你好,Hello,안녕하세요, こんにちは,我是会说四门语言,但是日语可以忽略,韩语也差不多已经忘记,转而写R和Python的语言学迷妹聂大哥. 我要说的脑洞有毒的数据媛就是我计己,哈哈.正式入坑数据 ...

最新文章

  1. MS Vs.net 2003 Sp1发布!
  2. 端口复用(解决C/S模型的BUG)
  3. python hacklib_【入门】angr:基于python的二进制分析框架
  4. 模拟网页行为之实践篇二
  5. 扫雷php,PHP也可以写扫雷游戏 不信看这里 PHP挖地雷
  6. 万字综述,GNN在NLP中的应用,建议收藏慢慢看
  7. 企业管理的实质和核心是人的管理
  8. 使用VC获取字符串的长度
  9. Apache RewriteCond on HTTP_COOKIE
  10. 凸优化第八章几何问题 作业题
  11. 学生优化--文本框限制
  12. 用Raspberry Pi作AirPlay服务端
  13. 再见了Antirez永远的Redis之神
  14. 一文了解中央银行数字货币CBDC的总体框架
  15. for循环小技巧,遍历数组的时候要使用恰当
  16. 微信浏览器apk下载的解决方案
  17. linux设备模型七(device_driver细节)
  18. POSTGRESQL 差点发生一次冻结炸弹后的反思
  19. 利用python在网上接单赚钱,兼职也能月入过万,还不赶紧学起来
  20. Odoo ERP 14 客户关系管理

热门文章

  1. 机器学习-----回归树
  2. pycharm 激活码使用
  3. 自注意力机制-李宏毅
  4. linux mysql 1055_linux mysql5.7报err 1055错误 sql_mode=only_full_group
  5. Visual Studio 2019下载、安装全教程、及使用简单窗体应用程序
  6. JAVA调用小票打印机
  7. 问题 C: 调酒壶里的酸奶
  8. 王者荣耀S21赛季峡谷异闻皮肤曝光 鬼谷子原初探秘者
  9. 制定城市大脑建设标准应遵循的十条原则探讨
  10. 转JSON数据的基本使用