记得小时候经常讲的一个故事:从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容是“从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容…”
什么是递归,上面的小故事就是一个明显的递归。以编程的角度来看,程序调用自身的编程技巧称为递归( recursion)。
百度百科中的解释是这样的:递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
1 递归的定义
递归,就是在运行的过程中调用自己。
递归必须要有三个要素:
①、边界条件
②、递归前进段
③、递归返回段
当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
2 求一个数的阶乘:n!
n! = n*(n-1)*(n-2)*......1
规定:
①、0!=1
②、1!=1
③、负数没有阶乘
上面的表达式我们先用for循环改写:
/**
* 0!=1 1!=1
* 负数没有阶乘,如果输入负数返回-1
* @param n
* @return
*/
public static int getFactorialFor(int n){
int temp = 1;
if(n >=0){
for(int i = 1 ; i <= n ; i++){
temp = temp*i;
}
}else{
return -1;
}
return temp;
}
如果求阶乘的表达式是这样的呢?
n! = n*(n-``1``)!
我们用递归来改写:
/**
* 0!=1 1!=1
* 负数没有阶乘,如果输入负数返回-1
* @param n
* @return
*/
public static int getFactorial(int n){
if(n >= 0){
if(n==0){
System.out.println(n+"!=1");
return 1;
}else{
System.out.println(n);
int temp = n*getFactorial(n-1);
System.out.println(n+"!="+temp);
return