1、递归就是方法自己调用自己,每次调用的时候传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码编的简洁。(自己调用自己)
重复打印
import java.util.Scanner;
public class Change{
public static void main(String[] args){
T t1 = new T();
t1.test(4);
}
}
class T{
public void test(int n){
if (n > 2 ) {
test(n - 1);
}else{
System.out.println("n = " + n);
}
}
}
调用方法后完返回原来的位置,继续执行。每次执行方法都要把所有的方法执行完毕。
阶乘
import java.util.Scanner;
public class Change{
public static void main(String[] args){
T t1 = new T();
int n1 = t1.factorial(5);
System.out.println(n1);
}
}
class T{
public int factorial(int n){
if (n == 1) {
return 1;
}else{
return factorial(n - 1) * n;
}
}
}
递归总是从最顶层开始往下出结果的。就像函数的嵌套,把原来的结果赋值给原来的函数。一层层循环下去。
递归需要遵守的规则:
1、执行一个方法时,就创建一个行的受保护的独立空间。
2、方法的局部变量是独立的
3、如果方法中使用的是引用数据类型(数组,对象),就会共享该引用类型的数据。
4、递归必须退出递归的条件逼近,否则就会无线递归。(往退出的条件逼近)
5、当一个方法执行完毕,或者遇到return,就会返回,谁调用就返回给谁(不然我调用的目的是干嘛),同时当方法执行完毕或者返回时,该方法也就执行完毕。
斐波那契数
import java.util.Scanner;
public class Change{
public static void main(String[] args){
T t1 = new T();
int n1 = t1.factorial(7);
System.out.println("输出的结构是 " + n1);
}
}
class T{
public int factorial(int n){
if (n >= 1) {
if (n >= 3) {
return factorial(n - 1) + factorial(n - 2);
// 其实这只需要知道表达式
}else{
return 1;
}
}else{
System.out.println("输入有误 " );
return -1;
}
}
}
猴子吃桃;
import java.util.Scanner;
public class Change{
public static void main(String[] args){
T t1 = new T();
int n1 = t1.test(1);
System.out.println("输出的结构是 " + n1);
}
}
class T{
public int test(int day){
if (day == 10) {
return 1;
}else if(day >= 1 && day <= 9){
return (test(day + 1) + 1) * 2;
}else{
System.out.println("day 在1-10");
return -1;
}
}
}