本人本科是电子专业,读研走上了计算机视觉这条“不归路”。只因本科编程方面的学习、训练不够充足,所以现在只能死磕编程和算法。
最近上的一门算法课,老师讲了几种排序方法:冒泡、快速、插入、分堆、二分归并····冒泡和插入是很简单的循环比较交换位置的排序方法,而快速和二分归并则需要用到递归的方法。什么是递归,什么时候需要用到递归呢?
参考了大神的文章什么是递归函数?
什么是递归
一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。即函数直接或间接调用函数本身,则该函数称为递归函数。
什么时候需要用到递归
这就不得不提起分治算法思想,分治思想字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
想更深入了解的指路[五大常用算法之一:分治算法](https://blog.csdn.net/weixin_44489823/article/details/92799755)
上例子
#5的n次方
def wudencifang(n):
if n == 1:
return 5
return 5 * wudencifang(n-1)
print(wudencifang(3))
菲波那嵌数列[斐波那嵌数列](https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145?fr=aladdin)
def feibo(n):
if n <= 2:
return 1
else:
return feibo(n-1) + feibo(n-2)
print(feibo(8))
注意事项
递归最最最重要的是结束条件,若没有结束条件就是一个死循环。另外一个就是递推关系,执行递归函数将反复调用其自身,每调用一次就进入新的一层。
最后要注意的是,每调用一次递归函数,就要分配一次局部变量、一次形参、一次调用函数地址、一次返回值。若调用n次,效率必不会有多高。因此,我们遵循能用循环解决的,尽量不使用用递归.
循环能干的事,递归都能干;递归能干的循环不一定能干!