递归
1. 递归的概念
递归算法:
- 直接或间接调用自身的算法称。
递归函数:
- 用函数自身给出定义的函数。
注:
- 有些数据结构,本身带有递归特性,适合用递归的形式来描述,如:二叉树。
- 有些问题,虽然其本身没有明显的递归结构,但用递归技术来求解使设计出的算法简洁易懂、易于分析。
2. 实例
2.1 阶乘函数
递归定义:
n ! = { 1 , n = 0 n ( n − 1 ) ! , n > 3 n!=\left\{ \begin{aligned} 1&, n=0 \\ n(n-1)!&, n>3 \end{aligned} \right. n!={
1n(n−1)!,n=0,n>3
实现:
public int factorial(int n){
if(n==0) return 1;
else return factorial(n-1)*n;
}
2.2 Fibonacci函数(斐波那契函数)
无穷数列1,1,2,3,5,8,13,21,34,55,…, 被称为Fibonacci数列。
递归定义:
F ( n ) = { 1 , n = 0 , 1 F ( n − 1 ) + F ( n − 2 ) , n > 1 F(n)=\left\{ \begin{aligned} 1&, n=0,1 \\ F(n-1)+F(n-2)&, n>1 \end{aligned} \right. F(n)={
1F(n−1)+F(n−2),n=0,1,n>1
非递归定义:
F ( n ) = 1 5 ( ( 1 + 5 2 ) n + 1 − ( 1 + 5 2 ) n − 1 ) F(n)=\frac{1}{\sqrt 5}\left(\left(\frac{1+\sqrt 5}{2}\right)^{n+1}-\left(\frac{1+\sqrt 5}{2}\right)^{n-1}\right) F(n)=