文章目录
- 递归的概念
- 递归三要素
- 递归demo
- 打印100次“hello word”
- 斐波那契数列
递归的概念
递归算法是一种直接或者间接调用自身函数或者方法的算法。
递归三要素
-
递归条件结束
因为递归是循环调用自身,因此就必须要有结束条件,或者就会OOM。 -
函数的功能
函数的功能具体式做什么的需要清楚。打印?计算?移动位置?… -
函数的等价表达式
递归公式一般是每次执行之间,或者与个数之间的逻辑关系。
递归demo
打印100次“hello word”
package com.xxliao.algorithms.recursion.demo;
/**
* @author xxliao
* @description: 利用递归实现 打印100次 hello word
* @date 2024/5/29 23:42
*/
public class Demo01 {
public static void main(String[] args) {
print("hello word",100);
}
/**
* @description 打印 count 次 message 信息
* @author xxliao
* @date 2024/5/29 23:44
*/
public static void print(String message,int count) {
if(count > 0) {// 递归的结束条件
System.out.println(message); // 函数的功能
print(message,count-1); //函数的等价关系式
}
}
}
输出结果:
斐波那契数列
package com.xxliao.algorithms.recursion.demo;
/**
* @author xxliao
* @description: 利用递归实现如下功能:
* 斐波那契数列:1、1、2、3、5、8、13、21、34、55.....
* 规律:从第3个数开始,每个数等于前面两个数的和
* 递归分析:
* 函数的功能:返回n的前两个数的和
* 递归结束条件:从第三个数开始,n<=2
* 函数的等价关系式:fun(n)=fun(n-1)+fun(n-2)
* @date 2024/5/29 23:47
*/
public class Demo02 {
public static void main(String[] args) {
System.out.println(fun(9));
}
//用于存储每次的计算结果
static int[] sub=new int[10];
/**
* @description 斐波那契数列 实现,
* @author xxliao
* @date 2024/5/29 23:49
*/
public static int fun(int n) {
if(n==1 || n==2)
return 1;
if(sub[n]==0){
sub[n]=fun(n-1)+fun(n-2);
}
return sub[n];
}
}
输出结果: