什么是递归?
不断调用自身,每次调用的时候都会改变一个关键变量,直至改关键变量达到设定的额定值时(边界),结束调用
递归的核心思想
将一个大规模的问题拆分成一个个小的问题,通过解决一个个小的问题逐步来解决大问题;说的通俗一点就是:大事化小,小事化了;
类似于数学中的阶层。
递归的组成
- 递归尽头:什么时候不在调用自身,即为边界;如果递归中没有归头,程序将陷入死循环
- 递归主体:调用条件,什么时候需要调用自身
问题:计算 5 的阶层
优缺点:
- 优点:代码简洁、清晰、并且容易验证准确性
- 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响。代码看着舒服了,电脑负荷就大了
递归与循环的区别与联系
相同点:
- 都是通过控制一个变量的边界(或者多个),来改变多个变量为了得到所需要的值,而反复而执行的;
- 都是按照预先设计好的推断实现某一个值求取;(请注意,在这里循环要更注重过程,而递归偏结果一点)
不同点:
递归通常是逆向思维居多,“递”和“归”不一定容易发现(比较难以理解);而循环从开始条件到结束条件,包括中间循环变量,都需要表达出来(比较简洁明了)。
简单的来说就是:用循环能实现的,递归一般可以实现,但是能用递归实现的,循环不一定能。因为有些题目①只注重循环的结束条件和循环过程,而往往这个结束条件不易表达(也就是说 用循环并不好写);②只注重循环的次数而不注重循环的开始条件和结束条件(这个循环更加无从下手了)。