迭代——递归
这一次的总结的标题有些不一样,为什么说“人用迭代,神用递归”呢?这是因为迭代和递归都可以解决代码中反复出现的语句,只是解决的方法不一样罢了。
迭代
迭代字面意思就是一代又一代,听起来有点儿像循环,实际上它就是循环,迭代思想就是运用循环去解决代码中反复出现的语句。而循环作为Java语言中较为基础的一种方法,是能够被大家所熟悉掌握的,这也是为什么“人用迭代”。
递归
递归的含义就是层层递进,之后全部归一。那怎么实现层层递进呢?递归就用函数自身调用函数自身实现的。递归其实就是一种算法,而这个算法的核心就函数,以为函数所能参与的面及其广,所以递归能解决的问题也就非常多。一般而言,但凡能够被迭代(循环)解决的问题,递归都可以。但是递归能解决的问题,迭代却不一定能够解决。
说了这么多,递归在代码中到底是怎么实现的呢?递归其实是分治法的一种实现方式(一种实现思路),分治法一种算法思想,分治法主要解决的问题是将大问题,进行拆分,拆分成若干个小的问题进行求解,最终将每个小问题的解进行合并。其实,分治法就是一种暴力破解法(穷举),也是一种搜索最优答案的算法。它就相当于现实中我们所说的地毯式搜索,这样就会大大减少漏的几率,但是这样也会消耗大量的人力物力财力,回到分治法和递归中,也就是说,这样会占用栈内存中大量的内存,造成了运行代码时计算机计算数据的速度会很慢,这就是递归的一个缺陷。</