我学习递归的动因是因为做题过程中有一些怎样解决都无法方便解决或根本用普通算法根本无法解决的问题,在这种疑惑的状态,我有了解到,这些题如果用递归解决的话会更顺手,简易。但是在刚开始学习的时候,我并不知道递归是什么东西,只是先百度了一下,百度内容如下:
---------------------------------------------------------------------------------------------------------------------------------
递归,就是在运行的过程中调用自己。
函数嵌套调用过程示例
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。
---------------------------------------------------------------------------------------------------------------------------------
用我自己的语言来说,递归就是一个指涉自己的循环,这个循环计算的结果,是下一个循环需要使用的参数,且这个循环必须要有个出口,要不然循环会一直循环下去,造成程序崩溃。
由于刚学习递归所以就找了一些简单的算法题应用:
public class KuaiPai {
static int arr[]= {50,2,6,8,9,10,1};
//设置一个公共数组arr
public static void main(String[] args) {
quick(arr,0,arr.length-1);
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
//快排,方法
public static void quick(int[] arr,int left ,int right) {
//递归时判断
if(left>=right) {
return;
}
//设置指针从left,right,处开始.
int key=arr[left];
int l=left;
int r=right;
//如果l不等于r则循环继续
while(l!=r) {
//如果r处的值大于key(第一个数)或者指针l的位置在指针r的位置的后面,则执行循环
while(arr[r]>=key&&l<r) {
//指针向后移动
r--;
}
//如果l出的值小于key,或者指针l的位置在指针r的位置的后面,则执行循环
while(arr[l]<=key&&l<r) {
//指针向钱移动
l++;
}
//如果跳出如上循环,则表示指针位置停止,且l的位置《r的位置,则执行如下代码
if(l<r) {
int temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
//交换人r,l位置的元素
}
}
//跳出循环 则表示r与l的位置相同,则执行如下代码
arr[left]=arr[l];
arr[l]=key;
//交换使l所在的元素和key交换
quick(arr,left,l-1);
//将右边的元素递归
quick(arr,l+1,right);
//将左边的元素递归
}
}
这是递归在排序的应用,叫快排。、
他是通过设立一个分界值,将这个分界值放在中间,大于他的放在右边,小于他的放在左边,然后分别再次递归,将两边重复此操作。使得数组可以快速排序。
通过这次练习,我理解了递归的内涵,小试牛刀的熟练了递归的应用。故有感而发,将我对递归的理解分享在这里,希望能看到的人,多多交流,互相学习,文章至此。