一开始知道这个递归函数的时候,我的内心是崩溃的。。。

什么?还能自己调用自己?这是什么骚操作?

在数据结构与算法里有专门提到过这个递归思想。

那究竟什么样的问题可以用递归来解决呢?

我总结了三个条件:

1. 一个问题的解可以分解为几个子问题的解何为子问题?子问题就是数据规模更小的问题。

2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样

3. 存在递归终止条件把问题分解为子问题,把子问题再分解为子子问题,一层一层分解下去,不能存在无限循环,这就需要有终止条件。

哪一类问题属于递归的呢

比如问小红几岁,他说比小明大3岁,然后问小明几岁,小明说比小丽小四岁,问小丽几岁,小丽说10岁。

这样一来,我们就可以由小丽知道小明的年龄,从而知道小红的年龄。

小丽的年龄就是一个终止条件,而小红几岁这个问题,要拆解为小明几岁和小丽几岁两个方面。

一般递归

def normal_recursion(n):

if n == 1:

return 1

else:

return n + normal_recursion(n-1)

执行:

normal_recursion(5)

5 + normal_recursion(4)

5 + 4 + normal_recursion(3)

5 + 4 + 3 + normal_recursion(2)

5 + 4 + 3 + 2 + normal_recursion(1)

5 + 4 + 3 + 3

5 + 4 + 6

5 + 10

15

尾递归

尾递归基于函数的尾调用, 每一级调用直接返回函数的返回值

更新调用栈,而不用创建新的调用栈, 类似迭代的实现,时间和空间上均优化了一般递归!

def tail_recursion(n, total=0):

if n == 0:

return total

else:

return tail_recursion(n-1, total+n)

执行:

tail_recursion(5)

tail_recursion(4, 5)

tail_recursion(3, 9)

tail_recursion(2, 12)

tail_recursion(1, 14)

tail_recursion(0, 15)

15

python函数递归年龄_Python学习笔记4-递归函数相关推荐

  1. python函数参数传递机制_Python 学习笔记(一) 理解Python的函数传参机制

    对于刚接触Python不久的新手,Python的函数传参机制往往会让人迷惑.学过C的同学都知道函数参数可以传值或者传地址.比如下面这段代码 点击(此处)折叠或打开 void func(int inpu ...

  2. python查看方法作用_python学习笔记1,新手小白也能看得懂

    这是酸菜在风变编程上学习python时积累的学习笔记,希望能帮到同样也在学习中的小伙伴.持续更新~ 第0关 Print()函数 (1)不带引号:让计算机读懂括号里的内容,打印最终的结果 例:print ...

  3. python __name__怎么使用_python学习笔记26(python中__name__的使用)

    在python中,每个py文件都是一个模块,也都是一个可执行文件,即包含main方法.因此,对每个py文件,可以单独运行,也可以import它给其他客户使用,这两种情况不一样. 1. 如果模块是被导入 ...

  4. python的continue用法_Python学习笔记之Break和Continue用法分析

    本文实例讲述了Python学习笔记之Break和Continue用法.分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 conti ...

  5. python函数递归年龄,python之函数递归

    函数递归调用 在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用 为防止无限递归类似于死循环,需要如下: 1.必须要有一个明确的返回值: 2.每次进入更深一层递归时,问题规模应该比 ...

  6. python 异步加载_Python学习笔记4——爬取异步加载数据

    一.什么是异步加载? 在之前的学习笔记中,爬取的网页是需要手动翻页的网址,但是一些网站是通过自动加载翻页的,如knewone网页.浏览knewone的官网就能发现,当下拉到网页最下端时,网站会自动加载 ...

  7. python 坐标轴 单位刻度_Python学习笔记(matplotlib篇)--坐标轴刻度

    python学习笔记--坐标轴刻度 所用的库及环境: ide:pycharm python环境:python3.7 matplotlib:   matplotlib 1.11 numpy:  nump ...

  8. python的基本数据结构_Python学习笔记——基本数据结构

    列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...

  9. python的基本数据结构_python学习笔记-基本数据结构

    Python 学习笔记-1 写在最前面,因为组内小伙伴要走,生信团队由原来的7个人,慢慢的变的只有我一个人了,需要紧急突击下python,因为有python的流程要交接维护 python 基本情况 代 ...

最新文章

  1. 报名 | 四场直播讲透AI芯片的应用与挑战、剖析技术难点,芯片的所有知识点都在这了...
  2. 网站的高性能架构-性能测试方法
  3. 【Paper】2017_Limit-Cycle-Based Decoupled Design of Circle Formation Control with Collision Avoidance
  4. python海龟图 如何控制线的粗细_使用Python中的高级turtle(海龟)作图方法
  5. 软硬兼备 学做CIO
  6. SpringSource通过Spring for Android 1.0将Spring Framework引入到Android上
  7. SQL Server中的查询优化技术:基础
  8. 弹簧设计计算软件简介
  9. memory hierachy
  10. 查信用、查企业的国家平台
  11. net core 微服务 快速开发框架 Viper 初体验
  12. PHP使用Composer配置微信支付SDK
  13. c++直角空心三角形_2019秋人教版八年级数学上册三角形教材全解读
  14. 通过ping检测网络故障的典型次序
  15. windows 安装labelme
  16. 【MAX78000基础案例演示】
  17. 域服务器禁用无线,无线域服务常见问题
  18. L1-051 打折 (5分)
  19. Cisco ASA5520 配置说明
  20. python实现ping工具

热门文章

  1. 指针,c语言关键字,作用域,生命周期,内存数据存储
  2. 解决因删除外键引用的时候导致相应字段被删除了的问题
  3. 【python-numpy 】中的随机打乱数据方法np.random.shuffle
  4. c#设置图片的dpi_被忽视的鼠标设置,影响瞄准的关键因素就是它!
  5. Caffe-windows入门学习,编译、训练、测试详细教程
  6. OpenCV图像颜色模型转换:cvtColor函数的使用
  7. 台积电砸7500亿强攻5nm
  8. 两台机器做互相信任 scp不使用密码
  9. [Android] android的消息队列机制
  10. 完整的目标管理三段俱全