终极三问,What, How, Why
1.What, 递归到底是个啥?
定义:递归算法(recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环
什么玩意,能不能说人话,好吧,通俗的理解是这样的:
递归是一种自己调用自己的函数的方法,用于**规律性的数据处理**。相对应于递推(循环),代码简洁明了,易于阅读,但很耗费内存,
数据过大易引起程序崩溃
2.How,如何使用递归?
举个例子,阶乘:
/**
* Title: 阶乘的实现
* Description:
* 递归解法
*/
public class Factorial {
/**
* @description 阶乘的递归实现
* @created 2017年5月10日 下午8:45:48
* @param n
* @return
*/
public static long f(int n){
if(n == 1) // 递归终止条件
return 1; // 简单情景
return n*f(n-1); // 此行是关键,f(n-1)就是前面说的自己调用自己的函数,n*f(n-1)代表的是规律,也就是问题抽象出来的逻辑
}
3.Why , 为什么要用递归?
为啥,方便呗,不是有句话说递归方便了程序员,苦了电脑嘛,但为什么又不是很长见呢,太费算力了,少用,分情况用,切记。