首页 > 代码库 > 使用递归解决一些问题

使用递归解决一些问题

1:字符串反转 “abcde”=>"edcba"

技术分享

直接贴代码:

private static String f(String str) {
  if(str.length()==0) return"";
  return f(str.substring(1))+str.charAt(0);
 }

 

2:将 ABCD全排列

分析:

A

B

C

D

   对于以上递归我们只要找到解决问题的相似处,然后在找到出口,即可解决。对于该问题,我们试着将A与其他元素依次交换,对于其后面的元素我们也可同样这样考虑

//参数1:元素数组
 //参数2:表示该将哪一个元素依次与其他元素交换
 private static void pailie(char []str,int n){
  //出口
  if(n==str.length){
   for(int i = 0; i <n;i++){
    System.out.print(str[i]+" ");
   }
   System.out.println();
   return;
  }
  //相似解决方案
  for(int i = n;i<str.length;i++){
   char tem = str[n];str[n] = str[i];str[i] = tem;//将n位置的元素与其他位置的元素交换
   pailie(str,n+1);//递归到下一层执行相似的步骤
   tem = str[i];str[i] = str[n];str[n] = tem;
   //当下一层返回结果时将当前交换的元素恢复,让当前元素与其他元素进行交换
   //称之为回溯
  }
 }

结果:

技术分享

使用递归解决一些问题