day21 Java 递归


I know, i know
地球另一端有你陪我




递归

方法定义本身调用方法本身的现象叫递归
注意区别与方法的嵌套(在方法中调用其他方法)

递归的注意事项:
1、递归一定要有一个出口,结束条件,否则就是死循环
2、递归的次数不能太多,否则就会发生内存溢出
3、构造方法不能递归使用

阶乘

/*
		5! = 5 * 4 * 3 * 2 * 1
*/
public static int fun(int i){
    
    
        if(i == 1){
    
    
            return 1;
        }
        return i * fun(--i);
    }

斐波那契数列

/*
		1,1,2,3,5,8,13,...
*/
public static int fun(int i){
    
    
        if(i == 1 || i ==2){
    
    
            return 1;
        }
        return fun(i - 2) + fun(i - 1);
    }

删除文件夹

public static void fun (File file){
    
    
    File[] files = file.listFiles();

    for (File f : files) {
    
    
    	//	此处先判断文件夹,可以省去一个 delete 语句
        if(f.isDirectory()){
    
    
            fun(f);
        } else {
    
    
        	//	同时肩负文件和文件夹的删除
            System.out.println(f.delete());
        }
    }
    System.out.println(file.delete());
}

合并有序链表

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    
    
	//	循环终止条件,过程中二者将反复触发
	//	不断将尾巴返回
    if(l1 == null)
        return l2;
    if(l2 == null)
        return l1;

    if(l1.val < l2.val){
    
    
    	//	拼接有序链表,构成新链表的核心语句
        l1.next = (mergeTwoLists(l1.next,l2));
        //	最终返回有序链表,同下方 return 二者最终触发其一
        return l1;
    } else {
    
    
        l2.next = (mergeTwoLists(l1,l2.next));
        return l2;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41464008/article/details/120854824
今日推荐