专栏首页技术圈常用的递归算法

常用的递归算法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_27717921/article/details/52371598

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 条评论
登录 后参与评论

相关文章

  • 基于邻接矩阵的无向图的深度广度遍历实现

    图的创建及深度广度遍历的代码实现,基于的是邻接矩阵,图这里是无向图,并且两个顶点之间有连接则邻接矩阵非零,如果没有连接则为零

    张凝可
  • 面试中常用到机试题

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    张凝可
  • 动态规划算法举例解析(最大收益和最小损失选择)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    张凝可
  • 数据结构基础-栈和队列

    栈是一个有序线性表,只能在表的一端(成为栈顶,top)执行插入和删除操作。最后插入的元素将第一个被删除。所以栈也称为后进先出(Last In First Out...

    1025645
  • 聊聊canal的LogFetcher

    canal-1.1.4/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogFetcher.java

    codecraft
  • 聊聊canal的LogFetcher

    canal-1.1.4/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/LogFetcher.java

    codecraft
  • 怎样让1+1=3?

    如下所示的是一个.NET程序。我们在这段程序中定义了一个作整数加法运算的Add方法,但是我希望将针对这个方法的调用转移到另一个Add2方法上,为此我定义了一个O...

    蒋金楠
  • 如何比较?Comparable还是Comparator

    我家开了个小卖店,为了实现数字化管理,我准备写个后台程序来对所有货物进行管理。首先定义了这个实体类,这个类就是“货物”类,num指的是他的编号,s指他的名称或描...

    naget
  • Android开发笔记(十四)圆弧进度动画CircleAnimation

    一个好看的APP,都有不少精致的动画效果。熟练运用各种动画技术,可让我们的APP灼灼生辉。Android在技术上把动画分为了...

    用户4464237
  • Android开发实战(十八):Android Studio 优秀插件:GsonFormat                       Android Studio 优秀插件(二): Parce

    听着music睡

扫码关注云+社区

领取腾讯云代金券