1.什么是递归?
递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.
使用递归有两个前提条件:
1.有一个趋近与终止的条件。
2.自己调用自己 。
如何实现递归?
最重要的方式是:实现递归,需要去推导出一个递推公式。
思考递归的方式:横向思考,根据递推公式来思考。
代码的执行:是纵向执行。
递归的分类:
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
递归实现99乘法表
public class diguidemo { public static void main( String[] args ) { digui(9); } private static void digui( int i ) { if (i==1){ System.out.println("1*1=1"); }else { digui(i-1); for (int j=1;j<=1;j++){ System.out.print(j + "*" + i + "=" + j * i + " "); } } } }
递归求和
public class diguiqiuhe { public static void main( String[] args ) { int num=5; int sum=getSum(num); System.out.println(sum); } private static int getSum( int num ) { if (num==1){ return 1; } return num+getSum(num-1); } }
例题:求第n个斐波那契数是
第一种方法:递归 public class TestDemo { public static int fib(int n){ if(n == 1 || n == 2){ return 1; }else{ return fib(n-2)+fib(n-1); } } public static void main(String[] args) { System.out.println(fib(5)); } 第二种方法:叫做循环(迭代)实现 public static int fib2(int n){ if(n == 1 || n==2){ return 1; } int f1 = 1; int f2 = 1; int f3 = 0; for (int i = 3; i < n; i++) { f3 = f1+f2; f1 = f2; f2 = f3; } return f3; } public static void main(String[] args) { System.out.println(fib2(45)); }
例题:递归实现按照顺序打印每一位的数字
public class TestDemo {
public static void print(int n){
if(n < 10){
System.out.print(n+" ");
}else{
print(n/10);
System.out.print(n%10+" ");
}
}
public static void main(String[] args) {
print(1234);
}
}