使用递归解决一些问题

Posted Aaronn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用递归解决一些问题相关的知识,希望对你有一定的参考价值。

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;
   //当下一层返回结果时将当前交换的元素恢复,让当前元素与其他元素进行交换
   //称之为回溯
  }
 }

结果:

以上是关于使用递归解决一些问题的主要内容,如果未能解决你的问题,请参考以下文章

计划递归解决问题的最佳方法是啥?

用递归算法解决问题

使用 D&C/递归的最大子数组

如何创建递归类型?

如何使用递归或其他技术解决以下问题

JAVA递归算法