引入
java
public class Demo01 {
public static void main(String[] args){
Demo01 demo01 = new Demo01();
demo01.test(4);
}
public void test(int n ){
if(n>2){
test(n-1);
}
System.out.println("n="+n);
}
}
大家可以看一下代码,自己想想会输出什么,再跑跑代码看看是不是一样的,具体的解释如下
这图是视频截取出来的,可以看到每递归一次就会创建了新的栈空间(黑线),每个栈都是独立,所以n也是独立的,当n=2时,不进入if判断,输出n=2,代码运行完毕,会把这个栈弹出,接着是返回n=3的栈(蓝线),运行完代码(每一个栈都会完整的执行完代码整体)进行输出后出栈。也就是后进先出,会先执行最后一个。
若是在if后面加一个else呢,又会打印什么?
javapublic class Demo01 { public static void main(String[] args){ Demo01 demo01 = new Demo01(); demo01.test(4); } public void test(int n ){ if(n>2){ test(n-1); }else { System.out.println("n="+n); } } }
加上else就之会输出n=2了,因为if-else语句只会执行满足条件的一条。
阶乘的递归实现
java public class Demo01 { public static void main(String[] args){ Demo01 demo01 = new Demo01(); demo01.test(4); } public void test(int n ){ if(n>2){ test(n-1); } System.out.println("n="+n); } }
斐波那契数列
java
public class Demo03 {
public static void main(String[] args) {
Demo03 demo03 = new Demo03();
int str = demo03.recursion01(6);
System.out.println(str);
}
/*
斐波那契数列1,1,2,3,5,8,13...
1、当n=1 为1
2、当n=2 为1
3、当n>=3 为前两个数的和
*/
//通项公式+终止条件
public int recursion01(int n){
if(n>=1){
if(n==1||n==2){ //n<3
return 1;
}else {
return recursion01(n-1)+recursion01(n-2);
}
}else {
System.out.println("输入错误");
}
}
}