概述
递归算法:执行代码,并没执行完全的时候调用自己本身,然后等待条件不满足递归的时候,完全执行代码,执行完全后返回上一层,执行未完成的部分;
递归算法与for,where循环可以相互转换,通过一定的方案达到一样的效果,比如for循环可以通过栈,实现递归的效果;
递归算法一般用于树的节点的遍历等...
递归算法的重点:参数的设置;
demo:斐波那契数列的实现
for循环方式实现:
//1,1,2,3,5,8,13,...
int num1=1;
int num2=1;
int num3=0;
int n=10;//表示斐波那契数列的第十项
for(int i=2;i<n;i++){
num3=num1+num2;
num2=num3;
num1=num2;
}
//后一项等于前两项相加
递归实现方式:
main方法
{
//调用
}
static int run(int n){
if(n==1||n==2){
return 1;
}else{
return run(n-1)+run(n-2);
}
}
该demo中,递归时间消耗远大于循环;(递归性能低)
---------------------------------------------------------------------------------------------------------------------------------------------------------------
demo2:树的遍历(文件夹遍历)-----真实场景中:文件夹的剪切(Java不提供文件夹的剪切方法,需要自己代码实现)
main(){//主方法
play(new File("D:\ceshi"));
}
static void play(File file){
//获取当前文件夹下的所有文件夹、文件
File[] files=file.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isFile()){//是文件
System.out.println(files[i].getName());
}else{//是文件夹
play(files[i]);
}
}
}
类似于树状的结构,使用递归效率较高;
如上述demo中的文件夹的遍历,又比如,快速排序算法的实现:
demo3:快速排序的实现
package zmc.text;
public class paixu {
public static void main(String[] args) {
int arr[]={5,6,3,8,4,9,5,1,2,8};
sortFinally(arr,0,arr.length-1);
}
public static void sortFinally(int[] arr,int lo,int hi){
if(lo<hi){
int middle=sort(arr,lo,hi);
sortFinally(arr,lo,middle-1);//左边
sortFinally(arr,middle+1,hi);//右边
}
}
public static int sort(int[] arr,int lo,int hi){
//找到一个标识:一般为数组的第一个值
int key=arr[lo];
//对一个数组进行循环遍历,i从左往右,j从右往左
//j先走,与key进行比较,比key小则赋值给i(对应的值)
//j赋值完就不动了,i开始走,遇到比key大的,停止,赋值给j对应的数字
//...
int i=lo;//开始位置
int j=hi;//结束位置
while(i<j){
while(i<j){
if(arr[j]<key){//j找小于key的值给i
arr[i]=arr[j];
break;
}
j--;
}
while(i<j){
if(arr[i]>=key){//i找大于key的值给j
arr[j]=arr[i];
break;
}
i++;
}
}
//当i,j相遇,key的值赋值给那个位置的数
arr[i]=key;
return i;
}
}
最后
以上就是害羞路人为你收集整理的递归算法(demo:斐波那契数列的实现,树的遍历,快速排序)的全部内容,希望文章能够帮你解决递归算法(demo:斐波那契数列的实现,树的遍历,快速排序)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复