Python | 循环与递归的区别

简介: 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适用场合

递归适合用在:

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

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

循环适合用在:

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


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


目录
相关文章
|
19天前
|
索引 Python
Python循环怎么给enumerate和for做对比
**Python中的`for`循环遍历集合,而`enumerate`函数在迭代时提供元素的索引。
|
3天前
|
搜索推荐 Python
快速排序:Python 中的速度之王,揭秘它的递归魔法与性能极限!
【7月更文挑战第12天】快速排序**是高效排序算法,基于分治策略。它选择基准值,将数组分成小于和大于基准的两部分,递归地对两部分排序。
|
1天前
|
消息中间件 安全 数据处理
Python中的并发编程:理解多线程与多进程的区别与应用
在Python编程中,理解并发编程是提高程序性能和响应速度的关键。本文将深入探讨多线程和多进程的区别、适用场景及实际应用,帮助开发者更好地利用Python进行并发编程。
|
9天前
|
设计模式 开发者 Python
Python中循环依赖问题及其解决方案
循环依赖是 Python 开发中需要特别注意的问题。通过重新设计模块结构、延迟导入、依赖注入、利用 Python 的动态特性以及代码重构等方法,可以有效地解决循环依赖问题。这些策略不仅有助于提高代码的可维护性和可读性,还能避免潜在的运行时错误。在实际开发中,开发者应该根据具体情况选择合适的解决方案。
|
12天前
|
算法 Java C++
C++和Python在内存管理上的主要区别是什么?
【7月更文挑战第2天】C++和Python在内存管理上的主要区别是什么?
11 1
|
19天前
|
分布式计算 算法 Python
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解
|
19天前
|
存储 Python
Python中list, tuple, dict,set的区别和使用场景
Python中list, tuple, dict,set的区别和使用场景
|
20天前
|
索引 Python
Python中append,insert和extend的区别
Python中append,insert和extend的区别
|
17天前
|
Shell Python
Python教程:return和yield的区别
Python教程:return和yield的区别
12 0
Python教程:return和yield的区别
|
21天前
|
设计模式 算法 Python
Python回调函数中的循环艺术:深入探索for循环的回调应用
Python回调函数中的循环艺术:深入探索for循环的回调应用
12 1