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;
}
}