图解算法之递归

//伪代码:对手头问题的简要描述,很类似自然语言。在很多国外coursers常用伪代码阐述算法流程

如果使用循环,程序的性能可能更高;若选择递归,程序可能更加容易理解。但是,实际上,如果用过多的循环,于程序的执行是不利的,不是很提倡(尤其是在MATLAB中)。

递归函数分为两部分:基线条件(函数不在调用自己)和递归条件(函数调用自己),如果没有基线条件,函数只能一直执行下去(ctrl+c退出)。

递归的优缺点

优点:

1. 简洁,一目了然

2.在树的前序,中序,后序遍历算法中,递归的实现明显要比循环简单得多。

缺点:

1.递归由于是函数调用自身,而函数调用是需要时间和花销的:每调用一次,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间,效率得不到保证。

2.递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,eg,斐波那契数列。

3.调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。

猜你喜欢

转载自blog.csdn.net/weixin_42662955/article/details/88982393