青草味的懒羊羊  
递归
  • A方法调用A方法,自己调用自己

  • 递归可以用简单的程序解复杂的问题,它可以将大型复杂的程序转化为与原问题相似的小问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算。递归的能力在于用有限的语句来定义对象的无限集合。

  • 递归适合小基数计算,大计算使用递归会导致程序崩溃(例如 10000!)

  • 递归结构包括两个部分

    • 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
    • 递归体:什么时候需要调用自身方法
//没有递归的结束判断,将陷入死循环,报错:StackOverflowError 栈溢出异常
public class Demo05 {
    public static void main(String[] args) {
        Demo05 demo05 = new Demo05();
        demo05.test();
    }
    public void test(){ // StackOverflowError 栈溢出异常
        test();
    }
}
  • 实例:递归求5!(5x4x3x2x1)
/**
param num 
**/
public static long f(long num){
    if(num==1){
        return 1;
    }else{
        return num*f(num-1);
    }
}
  • 1 ,1,2,3,5,8,13,21,34 求第30位
public static int test(int n){
        if(n==1){
            return 1;
        }else if(n==0){
            return 0;
        }else{
            return test(n-1)+test(n-2);
        }
    }
posted on 2021-09-08 20:43  青草味的懒羊羊  阅读(51)  评论(0)    收藏  举报