A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是递归:
就是方法自己调用自己
public static void test1(){
                System.out.println("-------------");
                test1();
        }
       
        public static void main(String[] args) {
                test1();
        }
使用递归:
        要有条件的使用递归
          public static void printNum(int num){
                num--;
                if(num >= 1){
                        printNum(num);
                }
                System.out.println(num);
        }
        public static void main(String[] args) {
                printNum(5);
        }

        如果没有 if(num>=1)这个条件 那么这个方法会陷入死循环  
性质和while(true)比较类似。

        public static void printNum(int num){
                num--;
                printNum(num);
                System.out.println(num);
        }
       
        public static void main(String[] args) {
                printNum(5);
        }
//这样会一直输出打印  特别占用资源   方法入栈那么太多就会导致栈内存溢出。造成安全隐患。
所以这个条件也被称为递归的出口。

要求:
内存角度  可能递归的次数太多,导致栈内存溢出
带返回值的递归
       

public static int getSum(int num){   //返回值变成了int
                //要有条件递归
                if(num > 1){   //比较逻辑运算符
                        return getSum(num - 1) + num;  //返回int类型
                } else {
                        return 1;   //返回int类型
                }
        }
        public static void main(String[] args) {
                int sum = getSum(5);
                System.out.println("sum = " + sum);
        }

根据递归做一个练习
5的阶乘:
          5! = 5 * 4 * 3 * 2 * 1

有一对兔子,从出生后第3个月起每个月都生一对兔子,
        小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
    问第二十个月的兔子对数为多少?
   
        规律:从第三个月开始,第n月是第n-1和n-2月的和
  

1 个回复

倒序浏览
个人总结了递归的一些用法 大家可以做一下联系 有什么不明白可以互相交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马