黑马程序员技术交流社区

标题: 关于递归的解释和用法(附两个练习题) [打印本页]

作者: 不安分的程序猿    时间: 2016-5-12 22:44
标题: 关于递归的解释和用法(附两个练习题)
什么是递归:
就是方法自己调用自己
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月的和
  
作者: 不安分的程序猿    时间: 2016-5-12 22:46
个人总结了递归的一些用法 大家可以做一下联系 有什么不明白可以互相交流




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2