一、递归算法的概述
递归算法的描述:把一个大规模的问题划分为一个个小规模的同类问题的子问题。
递归算法的特征:1、在函数中调用其本身;
2、必须有一个明确的递归出口;
3、递归结果的输出是一个堆栈结构,最后的结果最先输出,最初的结果最后输出。
二、一个简单的递归算法的思考
思考一:递归语句最后的输出结果是?
public class Test {
public int sum(int a,int b){
int result=a+b;
if(result<10){
sum(a+1,b+1);//递归调用
}
return result;
}
public static void main(String[] args){
Test test=new Test();
int result=test.sum(1,2);
System.out.println("result="+result);
}
}
输出结果:
结果分析:
因为递归的输出的结果是堆栈结果式的,堆栈的最大特点就是先进后出,后进先出。因此上述程序的输出结果也是按照该规则输出的,最后的result输出为3。
思考二:若递归中有多个递归调用,输出结果又会如何?
public class Test {
public int sum(int a,int b){
int result=a+b;
if(result<10){
sum(a+1,b+1);//递归一
System.out.println("The first recursion result="+result)
sum(a+2,b+2);//递归二
}
return result;
}
public static void main(String[] args){
Test test=new Test();
int result=test.sum(1,2);
System.out.println("result="+result);
}
}
输出结果:
结果分析:
以上程序增加了一个递归方法的调用以及一个打印语句输出。输出的结果的流程大致为:
思考三:输出语句的位置会不会对输出结果有影响?
再把上述程序稍微修改一下
public class Test {
public int sum(int a,int b){
int result=a+b;
if(result<10){
sum(a+1,b+1);
sum(a+2,b+2);
System.out.println("The second recursion result="+result);
}
return result;
}
public static void main(String[] args){
Test test=new Test();
int result=test.sum(1,2);
System.out.println("result="+result);
}
}
输出结果:
结果分析:
以上程序把输出语句的位置变换了一下,输出结果的顺序却发生了改变。
思考四:有多条输出语句,输出结果又会发生怎样的变化?
public class Test {
public int sum(int a,int b){
int result=a+b;
if(result<10){
sum(a+1,b+1);
System.out.println("The first recursion result="+result);
sum(a+2,b+2);
System.out.println("The second recursion result="+result);
}
return result;
}
public static void main(String[] args){
Test test=new Test();
int result=test.sum(1,2);
System.out.println("result="+result);
}
}
对这个感兴趣的同学,可以自己动手编码运行一下程序,分析一下结果。