Python | 循环与递归的区别

根据面向对象程序设计的思想,对象包括属性(数据)和方法(操作)。其实,递归和循环就相当于两种非常相似的操作,但是它们都有适合自己操作的数据。可以把一个问题看作一个对象,问题由数据(问题没有解决时的状态或数据结构)和操作(把问题解决)组成。根据不同的数据(数据结构——> 问题结构),选择相应的操作,才是合适的选择!

相同点:

  • 递归和循环的本质都是代码复用。

  • 递归和循环在理论上具有相同的计算能力(在可计算性理论中,这两种计算模型所计算的函数类是相同的)。

  • 递归是一种特殊的循环。

不同点:

  • 程序独立性

递归由程序和系统共同完成。递归需要系统维护一个系统工作栈。

循环由程序单独完成。但是,循环需要程序设定好循环条件。

  • 程序规模

递归的规模很小,受到系统工作栈大小的限制。

循环的规模很大,几乎不会受到限制。

在VS2012中计算1+2+3+······+n

使用递归n只能达到4710.

使用循环n可以达到20 0000 0000.

  • 复用单位

递归的复用单位是函数。

循环的复用单位是语句(for循环语句或while循环语句)。

  • 解题方向

递归往往是自顶向下(1 <—— n),将问题的规模逐步缩小,直到缩小至递归结束条件成立(n == 1)。

循环既可以是自顶向下(1 <—— n),也可以是自底向上(1 ——> n),但是一般还是自底向上(1——> n)的比较多。

3.5.优缺点

3.5.1递归的优点:

代码清晰简洁,易于理解,可读性强。

3.5.2递归的缺点:

运行效率低(函数调用需要参数入 栈和出栈);

对存储空间的占用比循环多,因此受到问题规模和线程空间大小的限制,如果栈溢出,将导致系统崩溃;

不便于调试。

3.5.3循环的优点:

运行效率高(不需要函数参数入栈和出栈);

对存储空间占用比递归少,不需要系统维护工作栈;

便于调试。

3.5.4循环的缺点:

一重,二重,三重循环还能接受,四重以上循环的代码就变得非常难看,可读性很差。而且有的问题非常适合用递归,用循环实现非常难。

3.6适用场合

递归适合用在:

数据的结构形式是按照递归定义的,比如单链表,二叉树,斐波那契数列等;

数据的结构形式不是按照递归定义的,但是用递归求解比用循环求解更加简单,比如汉诺塔问题,四重及以上循环问题。

循环适合用在:

数据的结构形式不是按照递归定义的,使用循环就能够轻松解决的问题,比如一重循环、二重循环、三重循环。

由于循环具有运行效率高,便于调试等优点,因此尽量使用循环。但是,当遇到如上面所示的两种适合递归的问题或者循环很难解决的问题时,就要使用递归。虽然使用递归牺牲了运行效率和存储空间,但是却换来了更加清晰简洁和易于理解的代码,可读性大大提高!

主编:王楠岚

稿件来源:深度学习与文旅应用实验室(DLETA)
(0)

相关推荐

  • 基于计算思维的高中信息技术课程有效教学策略探究 参考论文

    摘要:本文以教科版的"算法与程序设计"模块为例,分别从教学目标.任务设计.教学资源与教学评价四个方面对基于计算思维的高中信息技术课程教学策略进行探究,为培养具有计算思维的创新人才提 ...

  • Python自学教程第2期-求100以内奇数和

    前言:Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它 ...

  • 程序员的数学基础课:编程中的数学思维

    本文将从编程的角度出发,重新梳理这些内容,作为第一篇"基础思想"的总结. 5.1 数据结构.编程语言和基础算法 这一节我们汇总数学在常见的数据结构.编程语言和基础算法中的体现,让你 ...

  • 这个递归不太难

    相信大家都知道什么是递归,但在实际开发的时候用过多少次递归呢? 程序的世界有句话叫"人用循环,神用递归",很多情况下我们都会优先使用循环而不是递归.我和几个朋友聊过,他们的看法是: ...

  • 浅析线性递归和尾递归

    浅析线性递归和尾递归

  • Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题

    ML岗位面试:上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点-斐波那契数列.八皇后问题.两种LCS问题 Interview:算法岗位面试-上海某公司算法岗位(偏机器学 ...

  • Python|奇/偶数倒数求和之循环与递归的奥秘

    前言今天我们来解决粉丝提出的一个问题,如图: 问题描述编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n,输出结果示例:输 ...

  • Python和Matlab有什么区别?一分钟看懂!

    俗话说得好:技多不压身!近几年,随着社会的发展,竞争越来越大,为了获得长久发展,很多人都开始转行学技术,这其中有人会选择学Python,当然也有人想要学Matlab,那么Python和Matlab哪个 ...

  • Python循环语句代码逐行详解:while、for、break和continue

    导读:循环语句是指重复执行同一段代码块,通常用于遍历集合或者累加计算.Python中的循环语句有while语句.for语句. 作者:黄传禄 张克强 赵越 来源:大数据DT(ID:hzdashuju) ...

  • python笔记18-sort和sorted区别

    前言 python的排序有两个方法,一个是list对象的sort方法,另外一个是builtin函数里面sorted,主要区别: sort仅针对于list对象排序,无返回值, 会改变原来队列顺序 sor ...

  • python循环结构

    Python中没有do...while循环,很棒吧! for循环与其他语言中也不太一样,要更简单一些. 请往下看吧...... 1.while语句 用来处理循环语句,其形式如下: while 判断条件 ...

  • Python中Json和dict区别对比?入门分享!

    最近有人问小编说:Python开发中字典和Json的区别是什么?关于这个问题,小编通过下文为大家介绍一下. 什么是字典? 字典是一种数据结构,而json是一种数据格式就会有一些形式上的限制,比如jso ...

  • Python迭代器与生成器的区别!

    无论你是Python初学者还是爱好者,相信大家都听说过迭代器与生成器,但是很多同学搞不懂Python迭代器与生成器到底是什么?它们之间又有什么样的关系呢?接下来,小编通过这篇文章为大家介绍一下. 什么 ...

  • Python:loc和iloc的区别

    loc和iloc的区别 pandas以类似字典的方式来获取某一列的值,比如df['A'],这会得到df的A列.如果我们对某一行感兴趣呢?这个时候有两种方法,一种是iloc方法,另一种方法是loc方法. ...

  • Python循环结构中else用法(入门必读)

    Python 中,无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块,它的作用是当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码. 以 w ...