5577e0390001d23705970304.jpg
递归(Recursion),又译为递回,是指在函数的定义中使用函数自身的方法。
递归只是让解决方案更清晰,并没有性能上的优势。实际上,在有些情况下,使用循环的性能更好。如果使用循环,程序的性能可能更高;如何使用递归,程序可能更容易理解。
递归函数的组成:
1. 基线条件(base case)即函数不再调用自己,从而避免无限循环;
2. 递归条件(recursive case)即自己调用自己。
递归条件一定是向基线条件靠拢的,否则,智能无限递归下去。
堆栈(stack)
又称为栈或堆叠,是一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO,Last In First Out)的原理运作。
堆栈常用一维数组获链表来实现。堆栈常用两种基本操作,推入(压栈,push)和弹出(弹栈,pop):
推入:将数据放入堆栈的顶端,堆栈顶端移动到新放入的数据;
弹出:将堆栈顶端数据移除,堆栈顶端移动到移除后的下一个数据。
堆栈的特点:
1. 先入后出,后入先出;
2. 除头尾节点之外,每个元素有一个前驱,一个后继。
在计算结科学中是一种通过重复将问题分解为同类的子问题而解决问题的方法。
计算机科学家尼克劳斯·维尔特如此描述递归:递归的强大之处在于它允许用户用有限的语句描述无限的对象。因此,在计算机科学中,递归可以被用来描述无限的运算,尽管描述运算的程序是有限的。