目录
递归概念
递归:指在当前方法内调用自己的这种现象。
递归的分类:递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
注意事项:
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。(无穷递归,类似死循环)
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
示例一:计算1-100之间所有自然数的和
循环实现:
public class RecursionMethod1{
public static void main(String[] args) {
int sum = sum(100);
System.out.println("1-100的和:" + sum);
}
public static int sum(int n){
int sum=0;
for(int i=1;i<=n;i++){
sum+=i;
}
return sum;
}
}
递归实现:
public class RecursionMethod1{
public static void main(String[] args) {
int sum = sum(100);
System.out.println("1-100的和:" + sum);
}
public static int sum(int n){
if(n == 1){
return 1;
}else{
return n + sum(n-1);
}
}
}
示例二:求n!
public class RecursionMethod2{
public static void main(String[] args) {
int jieCheng = jieCheng(10);
System.out.println("10的阶乘是:" + jieCheng);
}
public static int jieCheng(int n){
if(n <= 1){
return 1;
}else{
return n * jieCheng(n-1);
}
}
}
示例三:计算斐波那契数列(Fibonacci)的第n个值
规律:一个数等于前两个数之和
f(0) =1,
f(1) = 1,
f(2) = f(0) + f(1) =2,
f(3) = f(1) + f(2) = 3,
f(4) = f(2) + f(3) = 5
...
f(n) = f(n-2) + f(n-1);
public class RecursionMethod3{
public static void main(String[] args) {
Count c = new Count();
System.out.println("f(10):" + c.f(10));
System.out.println("f方法被调用的总次数:" + c.total);
}
}
class Count{
int total = 0;
public int f(int n){
total++;
if(n <= 1){
return 1;
}else{
return f(n-2) + f(n-1);
}
}
}