递归
递归就是A方法调用A方法,也就是自己调用自己
- 求5的阶乘
public static void main(String[] args) {
System.out.println(countable(5));
}
public static int countable(int a){
if(a==1){
return 1;
}
return a*countable(a-1);
}
当我们在主方法调用阶乘方法,就会返回5*countable(a-1),可以理解为5乘以4!,而4!=4乘以3!,以此类推。程序中的if语句就是递归的边界,它控制递归的次数。在该程序中,当执行到第五次的时候,就会直接返回1,不会执行下面的return。因此最后会返回5乘以4乘以3乘以2乘以1,这就是递归。
- 举一个生活中常用的例子帮助大家理解。从一楼到二楼一共20个台阶,一次能走1个台阶或2个台阶,请问从一楼到二楼一共多少总走法?
我们可以进行逆向思维,要爬到第20个台阶,最后一步只有2种情况,从第19个台阶爬一个台阶上去或从第18个台阶爬2个台阶上去,因此就是f(20)=f(19)+f(18)。这个问题就被我们拆解成了爬19个台阶的走法加上爬18个台阶的走法,然后再向下推,就是f(20)=f(19)+f(18)=[f(18)+f(17)]+[f(17)+f(16)],…
执行下面代码,最终会有10946种方法`
public static void main(String[] args) {
System.out.println(f(20));
}
public static int f(int a){
if(a==1){
return 1;
}
if(a==2){
return 2;
}
return f(a-1)+f(a-2);
}