简简单单学习,快快乐乐生活。。。。
分类: Java
2016-08-28 20:32:28
递归方法【recursive】 是指方法直接或间接的调用自己的过程。
递归中最常用的就是递归算法:
是把问题转化为规模缩小了的同类问题的子问题。
然后函数(或过程)来表示问题的解。
一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).
递归是解决一些“特殊问题域”的思想,因为这些问题域存在一下条件
1. 有退出机制
2. 有规律
从这两条可以看出,这与循环的思想很类似,所以,有些循环本身就可以使用递归来完成。
如:求整数的阶乘,可以做如下对比。
//loop code
public long factor(int n){
Long result=1L;
//loop
for(int i=n;i>=1;i--){
result*=i;
}
return result;
}
//Recursive code
public long factor(int n){
//退出机制
If(n==1){
return 1L;
}
//递归
return n*factor_2(n-1);
}
最常见的就是,用递归算法解决,汉诺塔问题:
汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)
有一个人想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
在移动过程中可以利用B座,要求打印移动的步骤。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。
总结规律如下:(参考)
//code
Public void hanoiTower(int disks,char a,char b,char c){
//制定退出条件
If(disks=1){
System.out.printf(“碟子[%d],从%s移动到%s\n”,disks,a,c);
}else {
//递归调用
haoiTower(disks-1,a,c,b);
//输出a到c
System.out.printf(“碟子[%d],从%s移动到%s\n”,disks,a,c);
//继续递归
haoiTower(disks-1,b,a,c);
}
}