使用递归解决一些问题
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;
//当下一层返回结果时将当前交换的元素恢复,让当前元素与其他元素进行交换
//称之为回溯
}
}
结果:
以上是关于使用递归解决一些问题的主要内容,如果未能解决你的问题,请参考以下文章