循环和递归的优缺点

循环和递归的优缺点

1、使用前提
需要重复的多次的计算相同的问题,会用到递归和循环

2、百度百科定义:

递归:
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

简单地说就是在递归内部调用这个函数本身。

循环:
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。

简单地说就是通过设置初始值和终止条件,在一个范围内重复运算

3、优缺点分析:

递归
优点:代码更简洁清晰,可读性更好
递归的话函数调用是有开销的,而且递归的次数受堆栈大小的限制。

缺点:
时间和空间消耗比较大。每一次函数调用都需要在内存栈中分配空间以保存参数,返回地址以及临时变量,而且往栈里面压入数据和弹出都需要时间。
另外递归会有重复的计算。递归本质是把一个问题分解为多个问题,如果这多个问题存在重复计算,有时候会随着n成指数增长。斐波那契的递归就是一个例子。
递归还有栈溢出的问题,每个进程的栈容量是有限的。由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。

循环
缺点:
不容易理解,编写复杂问题时困难。代码可读性不如递归.
优点:
优点是效率高。运行时间只因循环次数增加而增加,没什么额外开销。空间上没有什么增加。

有人说:
小的简单的用循环,
太复杂了就递归吧,免得循环看不懂

我觉得这句话 话糙理不糙,非常有道理:对于小东西,能用循环干嘛要折腾?如果比较复杂,在系统撑的住的情况下,写递归有利于代码的维护(可读性好)。

发布了43 篇原创文章 · 获赞 41 · 访问量 1803

猜你喜欢

转载自blog.csdn.net/weixin_45662626/article/details/102568585