总结
找重复
1.找到一种划分方法
2.找到递推公式或者等价转换,都是父类问题转换为子类问题
找变的量
变化的量通常作为参数
找出口
所有的循环都可以改成递归
源代码
package shuyan1;
import java.util.*;
//递归:方法或函数内部调用了自己,但是要注意死循环
/*找重复:如何重复调用函数或方法才能实现目的
找变化:变化的量应该作为参数
找边界:出口*/
public class e {
public static void main(String[] args) {
System.out.println(a(3));
a1(1,10);
System.out.println();
System.out.println(a2(new int[]{1,2,3,4,5},0));
System.out.println(a3("abcde",4));
}
//阶乘:f(n)=n*f(n-1)
static int a(int n) {
if(n==1)
return 1;//出口,结束
return n*a(n-1);
}
//打印i~j :f(i,j)=f(i)->f(i+1)
static void a1(int i,int j) {
if(i>j)
return;//出口,结束
System.out.print(i+" ");
a1(i+1,j);
//再次调用a1函数时,这里的i+1相当于上面函数中的i
}
//数组
static int a2(int []arr,int begin) {
if(begin==arr.length-1)
return arr[begin];
return arr[begin]+a2(arr,begin+1);
}
//翻转字符串
static String a3(String len,int end) {
if(end==0)
return ""+len.charAt(end);
// 注意:String类型方法返回的也是String型
return len.charAt(end)+a3(len,end-1);
// 注意:String类型方法返回的也是String型
}
}