版权声明:本文为博主原创文章,遵循 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;
}
}