目录
导读概述
本文将从以下几个方面介绍递归算法:
1.什么是递归
2.递归三要素小技巧
3.递归小demo
4.斐波那契数列小案例
什么是递归
递归:在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。
递归特征:
-
递归,去的过程叫"递",回来的过程叫”归“。
-
递是调用,归是结束后回来。
是一种循环,而且在循环中执行的就是调用自己,递归调用将每次返回的结果存在栈帧中。
递归三要素模板
递归结束条件
既然是循环就必须要有结束,不结束就会OOM了。
函数的功能
这个函数要干什么,打印,计算....
函数的等价关系式
递归公式,一般是每次执行之间,或者与个数之间的逻辑关系。
DEMO:递归打印n数据
//递归打印遍历n数据
int diGui(int n) {
//1.递归条件
if(n<=0){
return 0 ;
}
//2.函数功能
System.out.println("递归调用 n:"+n);
//3.函数等价式功能 自己调用自己
return diGui(n-1);
}
输出结果:
//递归打印遍历n数据
public static void main(String[] args) {
OMetch.diGui(5);
}
输出结果:
递归调用 n:5
递归调用 n:4
递归调用 n:3
递归调用 n:2
递归调用 n:1
斐波那契数列
题目
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
斐波那契数列:0、1、1、2、3、5、8、13、21、34、55 ...
//递归打印遍历n数据
F(0) = 0,
F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
示例 1:
输入:n = 2
输出:1
示例 10:
输入:n = 10
输出:55
解题
规律:从第3个数开始,每个数等于前面两个数的和
递归分析:
函数的功能:返回n的前两个数的和
递归结束条件:从第三个数开始,n<=2
函数的等价关系式:fun(n)=fun(n-1)+fun(n-2)
解题代码如下:
/**斐波那契数列:
0、1、1、2、3、5、8、13、21、34、55.....
* @author lihaoran 递归代码
*/
public class Fibonacci {
public static int fun(int n){
if(n<=1){
return n;
}
return fun(n-1)+fun(n-2);
}
}
结果:入参:10 输出55
public static void main(String[] args) {
int fun = Fibonacci.fun(10);
System.out.println(fun);
}
//入参10的位置
//输出结果 55
复杂度分析
普通的斐波那契数列时间复杂度:O()
优缺点
优点:代码简单
缺点:占用空间较大、如果递归太深,可能会发生栈溢出、可能会有重复计算,通过备忘录或递归的方式。
优化手段:动态规划(请看动态规划篇)
复应用场景
递归作为基础算法,应用非常广泛,比如在
-
二分查找、快速排序、归并排序、树的遍历上都有使用递归
-
回溯算法、分治算法、动态规划中也大量使用递归算法实现
后记
本文从递归介绍以及案例分析给大家分享,如果感觉有所收获,可以动动小手指给点个赞,微信扫描关注本人微信公共账号,更多好文分享,感谢阅读!
end