常用的递归算法

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值