蓝桥杯 Day 02 递归与排序①

递归:自己调用自己

递归应该具有变化的东西和不变的东西,具有一定规律性,还得留有出口。

如切蛋糕、或数学规律。

字符串反转的递归算法:

/*
 * 用递归解决字符串反转
 * 
 * */
public class reverse {
	
	public static String strReverse(String str,int end) {
		if (end == 0) {
			return ""+str.charAt(0);
		}
		return str.charAt(end)+strReverse(str, end-1);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String string = "abcdefg";
		System.out.println("原串:"+string);
		System.out.println("反转:"+strReverse(string, string.length()-1));
		
	}

}

最大公约数的递归算法:

public class 最大公约数 {
	/*
	 * 最大公约数:数A 和  数B能除尽的最大数
	 * 
	 * */

	public static int gcd(int a,int b) {
		if (a%b==0) {
			return b;
		}
		return gcd(b, a%b);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(gcd(123, 12));
	}

}

汉诺塔:

import java.util.Scanner;

public class 汉诺塔 {

	public static void Hanoi(int N,String from,String to,String help) {
		
		/*
		 * 1.将1-(N-1)从源盘移动到辅助盘
		 * 2.将N移动到 目标盘
		 * 3.将1-(N-1)移动到目标盘
		 * */
		if (N==1) {
			System.out.println("Move "+N+" from "+from+" to "+to);
			return;
			
		}
		Hanoi(N-1, from,help , to);
		System.out.println("Move "+N+" from "+from+" to "+to);
		Hanoi(N-1, help, to, from);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int num = scanner.nextInt();
		Hanoi(num,"A","B","C");
		
	}

插入排序的递归算法:

public class 插入排序的递归算法 {
	
	public static void Insert(int[] arr,int k) {
		if (k==0) {
			return;
		}
		Insert(arr, k-1);
		int x = arr[k];
		int index = k-1;
		while (index>-1&&x<arr[index]) {
			arr[index+1] = arr[index];
			index--;
		}
		arr[index+1] = x;
		
	}
	public static void main(String[] args) {
		int[] arr = new int[] {5,12,6,3,2,16,1};
		Insert(arr, arr.length-1);
		for (int i : arr) {
			System.out.print(i+"\t");
		}
	}
}

斐波那契 :

public class 斐波那契 {
	public static int fib(int step) {
		if (step==1||step==2) {
			return 1;
		}
		return fib(step-1)+fib(step-2);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int N = 10;
		System.out.println(fib(N));
	}

}

希尔排序:

public class 希尔排序 {

	static void shell(int[] arr) {
		
		for (int i = arr.length/2; i>0; i=i/2) {
			for (int j = i; j < arr.length; j++) {
				int temp = arr[j];
				int index = j-i;
				while (index>-1&&temp<arr[index]) {
					arr[index+i] = arr[index];
					index-=i;
				}
				arr[index+i] = temp;
			}
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = new int[] {4,5,7,8,12,10,3,6,1,9};
		shell(arr);
		for (int i : arr) {
			System.out.println(i+" ");
		}
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值