思路
例题
package 递归;public class 反向打印字符串 {public static void main(String[] args) {f("ABC",0);}static void f(String str,int n){if (n==str.length()){return;}f(str,n+1);System.out.println(str.charAt(n)+"");}
}
多路递归
递归优化 -剪枝(记忆优化)
时间优化但是增加了空间成本,增加了空间复杂度。
package 递归;import java.util.Arrays;public class 记忆优化递归 {public static void main(String[] args) {System.out.printf("", fibonmacci(5));}
// 使用记忆法 改进
// params:n-第n项
// Returns:第n项的之public static int fibonmacci(int n){int [] cache = new int [n+1];Arrays.fill(cache,-1);//[-1,-1]cache[0]=0;cache[1]=1;return f(n,cache);}public static int f(int n,int [] cache){
// if (n==0) {
// return 0;
// }
// if (n==1) {
// return 1;
// }if (cache[n]!=-1) {return cache[n];}int x=f(n-1,cache);int y=f(n-2,cache);cache [n] =x+y;//存储当前计算的值return x+y;}
}
递归-爆栈问题
尾调用和尾递归
使内存能够得到及时的释放,某些编译器可以对尾调用做优化