在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法。
递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。在实际编程中尤其要注意栈溢出问题。
借助递归方法,我们可以把一个相对复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归方法只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。但在带来便捷的同时,也会有一些缺点,也即:通常用递归方法的运行效率不高。
public class DiGui {
/**
* 阶乘算法
*
* @param n
* @return
*/
public static int fun(int n) {
if (n == 1)
return 1;
else {
return n * fun(n - 1);
}
}
/**
* 通过递归算法,算出斐波那契之和.
*
* @param n
* @return
*/
public static int fun1(int n) {
if (n < 1)
return -1;
if (n == 1 || n == 2)
return 1;
return fun1(n - 1) + fun1(n - 2);
}
public static void main(String[] args) {
int fun = fun(5);
System.out.println(fun);
int res = fun1(7);
System.out.println(res);
}
}