认识递归
递归的定义
计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集。
三个重点如下:
- 自己调用自己,如果每个函数对应着一种解决方案,那么自己调用自己代表着解决方案一样
- 每次调用,函数处理的数据量和上次比较会缩减,且最后会缩减至无需继续递归(即要有结束条件)
- 子集(内层函数)处理完成,外层函数才能算是调用完成
利用递归实现几个小案例
链表的遍历
package algorithm.list;
import java.util.function.Consumer;
/**
* 这里主要介绍两种遍历方法
* 1、方式一:通过 Consumer 函数式接口
* 2、方式二:递归
*/
public class ListForEach {
public static void main(String[] args) {
// 获取到链表的头节点,然后进行遍历
Node head = getHead();
// 遍历方式一
foreachOneWay(head, System.out::println);
System.out.println("-------------");
// 遍历方式二
foreachTwoWay(head);
}
/**
* 遍历方式一:通过调用方控制,传入一个函数式接口
*/
public static void foreachOneWay(Node head, Consumer<Integer> consumer) {
if (head == null) return;
for (Node p = head; p != null; ) {
consumer.accept(p.val);
p = p.next;
}
}
/**
* 遍历方式二:递归
*/
public static void foreachTwoWay {
(head == ) ;
recursion(head);
}
{
(curr == ) ;
System.out.println(curr.val);
recursion(curr.next);
}
Node {
();
();
head.next = node1;
();
node1.next = node2;
();
node2.next = node3;
();
node3.next = node4;
head;
}
{
val;
Node next;
{ }
{
.val = val;
}
{
.val = val;
.next = next;
}
}
}



