常用的递归算法

原创 2016年08月30日 17:50:17
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;
	}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构学习笔记(11.递归的应用之常用递归算法)

本节知识点:

N后问题递归算法

  • 2013年12月25日 21:55
  • 450KB
  • 下载

第九周 【项目2 - 二叉树遍历的递归算法】

【二叉树遍历的递归算法】    实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。    请利用...

汉诺塔的递归算法 C语言

  • 2013年10月18日 16:14
  • 464B
  • 下载

c语言汉诺塔的递归算法

  • 2012年12月25日 14:57
  • 206KB
  • 下载

九连环的递归算法(C和C++)经验分析

九连环的递归算法   一、九连环简介   九连环游戏是中国人自己发明的,它的历史非常悠久,据说是起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个...

RSA基本递归算法——实验用

  • 2010年05月30日 11:51
  • 907B
  • 下载

递归算法实验

  • 2012年11月26日 21:32
  • 70KB
  • 下载

二叉树利用堆栈实现遍历的非递归算法

二叉树的遍历有三种不同的遍历方法,分别是前序遍历、中序遍历以及后序遍历 遍历的实现我们在上一篇博客中已经用递归的方法实现了,那么可不可以不用递归实现呢,答案是可以的,在这一篇博客中我们会利用堆栈将遍历...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常用的递归算法
举报原因:
原因补充:

(最多只允许输入30个字)