递归在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。
绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。
计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言中习惯用递归来实现循环。
在支持自调用的编程语言中,递归可以通过简单的函数调用来完成。
尾部递归是指递归函数在调用自身后直接传回其值,而不对其再加运算。
尾部递归与循环是等价的,而且在一些语言可以被优化为循环指令。
因此,在这些语言中尾部递归不会占用调用堆栈空间。
程序调用自身的编程技巧称为递归。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的能力在于用有限的语句来定义对象的无限集合。
一般来说,递归需要有边界条件、递归前进段和递归返回段。
当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归一般的作用用于解决三类问题:
1.数据的定义是按递归定义的。
(Fibonacci函数);
2.问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题;
3.数据的结构形式是按递归定义的。
递归数列 :一种给定A1后,用给定递归公式An+1=f(An)由前项定义后项所得到的数列。
数列是以正整数集(或它的有限子集)为定义域的函数,是一列有序的数。
数列中的每一个数都叫做这个数列的项。
排在第一位的数称为这个数列的第1项(通常也叫做首项),排在第二位的数称为这个数列的第2项,以此类推,排在第n位的数称为这个数列的第n项,通常用an表示。
著名的数列有斐波那契数列,三角函数,卡特兰数,杨辉三角等。