求100不断除以2直到商为0为止,打印每次除的商

用循环实现

n = 100 while n > 0: n = int(n/2) print(n) 输出:

50

25

12

6

3

1

0

如果用函数,如何实现呢?

def calc(n): n = int(n/2) print(n) if n > 0: calc(n) #调用自己 calc(100) 在函数内部,可以调用其他函数。如果一个函数在内部调用自已本身,这个函数就叫做递归函数。上面我们写的这个代码就是递归

递归的执行过程 def calc(n): n = int(n/2) print(n) if n > 0: calc(n) print(n) calc(10) 输出:

5

2

1

0

0

1

2

5

为什么输出是这样呢?

如上图所示,函数在每进入下一层的时候,当前层的函数并未结束,它必须等它调用的下一层函数执行结束返回后才能继续往下走。 所以最下面的那句print(n)会等最里层的函数执行时才会执行,然后不断往外退层,所以会出现0、1、2、5的效果

递归特性:

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

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

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

递归在特定场景下还是挺有用的,以后学的一些算法就得用到递归,比如堆排、快排等,现在看还是有些复杂的,以后再讲。

练习题 用递归实现2分查找的算法,以从列表 a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107] 查找指定的值。

注:参考答案在本章最后的练习题部分,但尽量先自己先。

转载于:https://juejin.im/post/5cef30f0e51d455071250aa1

小猿圈python学习-函数的递归相关推荐

  1. 小猿圈python金角大王_小猿圈python学习-基本数据类型

    小猿圈python学习-基本数据类型 2019-04-24 11:16:14 1点赞 6收藏 0评论 什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大, ...

  2. 小猿圈Python学习教程之后端接收前端回传的文件方法

    现在人工智能已经深入到千家万户,随之而来的就是python技术的火爆,今天小猿圈python讲师为你讲解一下后端接收前端回传的文件方法,希望对于刚刚自学python的你有一定的帮助. 如下所示: fi ...

  3. 小猿圈python学习-Selenium爬虫之使用代理ip的方法

    今天小猿圈给大家分享的是如何在爬取数据的时候防止IP被封,今天给大家分享两种方法,希望大家可以认真学习,再也不用 担心被封IP啦. 第一种: 降低访问速度,我们可以使用time模块中的sleep,使程 ...

  4. 小猿学python_小猿圈python学习之编程语言排名

    我们很多人在选择学一门编程语言的时候都会通过所学语言的人数排行来确定,因为用的人多意味着以后找工作的范围大一些,今天小猿圈就给大家分享目前各大编程语言的排名,以便于大家参考 排名前十的依旧是:Java ...

  5. 小猿圈 python学习-细讲数据类型-字典

    引子 我们学了列表 , 现在有个需求, 把你们公司每个员工的姓名.年龄.职务.工资存到列表里,你怎么存? staff_list = [ ["Alex",23,"CEO&q ...

  6. android调用python模块 chaquo_小猿圈python学习-系统调用os模块

    os 模块提供了很多允许你的程序与操作系统直接交互的功能 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()返回指定目录下的所有文件和目录名:os.listdir()函数 ...

  7. 小猿圈python学习-注释

    随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,哈哈,这太正常了. 另外,你以后在工作中会发现,一个项目多是由几个甚至 ...

  8. 银角大王 python_小猿圈python学习-细讲数据类型-列表

    第一章我们大概介绍了列表的基本用法,本节我们学习下 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 再回顾下列表的特点: 1.可存放多个值 2.按照从左到右的顺序定义列表元素 ...

  9. 小猿圈python学习-面向对象语法

    面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大 ...

最新文章

  1. freemarker include 和 import
  2. hadoop配置文件详解系列(二)-hdfs-site.xml篇
  3. 直观简洁的促销海报模板,明明白白搞事情!
  4. 如何利用FineBI做财务分析
  5. 利用Linq对集合元素合并、去重复处理
  6. codeforces 463A Caisa and Sugar 解题报告
  7. 远程登录 - telnet、mstsc等工具的使用及遇到的问题
  8. Node.js及Express的下载、安装和配置教程
  9. 计算机网卡接口,5.8.1 计算机网卡(1)
  10. 计算机WIN7安装,教您win7旗舰版安装教程
  11. liunx服务器日志在什么位置,系统日志查看位置(Windows+Linux)
  12. 如何对iOS设备进行性能测试
  13. git 多人在同一分支上迭代开发时,如何保证分支提交历史保持线性
  14. IDEA使用docker打包镜像
  15. 003.关于光流传感器(ADNS3080)调焦问题
  16. java runtime是什么软件_Java SE Runtime Environment (JRE) 运行Java程序的必备软件
  17. 基于JAVA汽车租赁系统 (Springboot框架) 开题报告
  18. 计算机学院杨洋,杨洋-湖北大学计算机与信息工程学院
  19. 包头市办理护照、港澳通行证流程
  20. log4j发送日志邮件

热门文章

  1. LeetCode: Convert BST to Greater Tree
  2. droidbox官网
  3. 这样就算会了PHP么?-11
  4. asp.net利用RAR实现文件压缩解压缩(转)
  5. Spring Boot 单例模式中依赖注入问题
  6. linux使用u盘的过程是,图文详解Linux下使用U盘的方法
  7. 为什么选择springcloud
  8. 最优化学习笔记(十五)——拟牛顿法(1)
  9. 互联网晚报 | 3月3日 星期四 |​ 苹果将于北京时间3月9日凌晨2点举办春季发布会;vivo子品牌NEX被砍掉...
  10. 2021年Q1移动互联网行业数据研究报告