递归:
递归的含义很好理解,就是一个函数调用自身,难就难在如何确定一个题目的递归式。
一个完整的递归函数包含两个部分:
- 递归式
- 递归出口
以斐波那契数列为例:
int f(int n){
if(n == 1 || n == 2) return 1; // 递归出口
return f(n-1) + f(n-2); // 递归式
}
求阶乘
static int f(int n){
if(n==1)
return 1;
return n*f(n-1);
}
打印从i到j的数字
static void f(int i,int j ){
if(i>j)
return;
System.out.println(i);
f(i+1,j);
}
翻转字符串
static String f(String str,int end){
if(end==0){
return ""+str.charAt(0);
}
return str.charAt(end)+f(str,end-1);
}
最大公约数
如果m%n==0,则最大公约数是n,负责,答案就是n和m%n的最大公约数
static int f(int m,int n){
//辗转相除法
if(m%n==0){
return n;
}
return f(n,m%n);
}