关闭

常用的递归算法

标签: 递归
87人阅读 评论(0) 收藏 举报
分类:
public class Recurison1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String str1 = "abba";
		/*System.out.print(judge(str1));*/
		String str2 = "abbae";
		/*System.out.print(judge(str2));*/
		System.out.print(judge2(str1,0,3));

	}
	//判断一个字符串是否为回文,可以采用队列来判断,也可以不利用队列,这里不
	//用队列来判断
	public static boolean judge(String string){
		int i=0;
		boolean flag = true;
		while(i<string.length()/2){
			
				if(string.charAt(i)!=string.charAt(string.length()-i-1)){
					flag = false;
					break;
				}
				i++;
		
			
			
			
		}
		return flag;
		
	}
	//用递归的方式求解
	public static boolean judge2(String string,int start,int end){
		if(start>=end){
			return true;
		}
		if(string.charAt(start)!=string.charAt(end)){
			return false;
			
		}
		return judge2(string,start+1,end-1);
	}

}
public class Recurison2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.print(fsRec(6));
		System.out.print(fsNoRec(6));
		//从0开始计数

	}
	//一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30个是多少
	public static int fsRec(int i){
		return i<=1?1:fsRec(i-1)+fsRec(i-2);
		
	}
	//非递归形式
	public static int fsNoRec(int i){
		int[] temp = new int[i+1];
		temp[0]=temp[1]=1;
		int sum = 0;
		for(int j=2;j<=i;j++){
			temp[j]=temp[j-1]+temp[j-2];
			
			                       
		}
		return temp[i];
		
	}

}

public class Recurison3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.print(fSNoRec(4));
		System.out.println();
		System.out.print(fSRec(4));

	}
	//一列数的规则如下: 1、12、123、1234、12345、123456......,求第n个数的递归算法

	//非递归形式
	public static int fSNoRec(int i){
		int j=1;
		int sum=0;
		while(j<=i){
			sum=sum*10+j;
			j++;
		}
		return sum;
		
	}
	//递归形式
	public static int fSRec(int i){
		
		return i<=1?i:fSRec(i-1)*10+i;
	}
}

public class Recurison4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print(reverseRec(1234,1));

	}

	//将一整数逆序,如987654321变为123456789
	public static long reverseRec(long x,int n){
		return x<10?x:(reverseRec(x/10,n)+(x % 10)*(n*= 10));
	}
	
}

public class Recursion5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.print(target(10,90));

	}
	//一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能行有多少种?
	public static long target(int n,int sum){
		      
		if ((n == 1 && sum <= 10) || (sum == n * 10)) return 1;
	             if (sum > n * 10 || sum < 0) return 0;
		            long ok = 0;
		             for (int i = 0; i <= 10; i++)
		             {
		                 ok += target(n - 1, sum - i);
	            }
		             return ok;
	}

}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20678次
    • 积分:738
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条