常用的递归算法

原创 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.递归的应用之常用递归算法)

本节知识点:

递归算法的实现

  • 2013-11-19 23:27
  • 111KB
  • 下载

N后问题递归算法

  • 2013-12-25 21:55
  • 450KB
  • 下载

冒泡排序、直接选则排序、递归算法

一、冒泡排序 执行结果 二、直接选则排序 执行结果 三、递归算法 1. 一列数的规则如下: 1、1、2...

递归算法总结

下面总结一些常见的递归编程题: 1.使用递归逆序打印单链表: #define _CRT_SECURE_NO_WARNINGS 1 #includeusing namespace std;struct...

c语言汉诺塔的递归算法

  • 2012-12-25 14:57
  • 206KB
  • 下载

汉诺塔递归算法

  • 2012-11-09 23:26
  • 17KB
  • 下载

简单的递归算法和简单的printf函数模拟

简单的递归算法和简单的printf函数模拟!
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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