目录
1、递归算法
(1)什么是递归?
(2)递归的三要素
2、斐波那契数列
(1)什么是斐波拉契数列?
(2)用递归方法求解斐波那契数列
1、递归算法
(1)什么是递归?
递归主要是指在函数的定义中使用函数自身的方法。
顾名思义,递归主要包含两个意思,递和归,这个是递归思想的精华所在。递归就是有去(递去)有回(归来)。“有去” 是指递归问题可以分解成若干个规模较小、与原问题形式相同的子问题,这些子问题可以和原问题用相同的方法来求解。“有回” 是指这些问题的演化过程是一个从大到小,并且最终会有一个明确的终点,一旦达到终点,就可以从终点原路返回,解决原问题。
更为直接的说法就是:递归的基本思想就是把大问题转化为相似的小问题解决。特别是在程序中的函数实现时,大问题的解决方案和小问题是一模一样的,所以就产生解决一个问题会调用函数本身的情况,这个也是递归的定义。
(2)递归的三要素
- 递归终止条件;
- 递归终止时候的处理方法;
- 递归中重复的逻辑提取,缩小问题规模。
递归终止条件
递归应该是有去有回的,这样递归就必须有一个明确的分界点,递归可以在什么时候结束。程序一旦达到这个临界点,就不用继续递归重复下去了。简单来说,递归的终止条件就是为了防止出现无限递归的情况。
递归终止时的处理方法
递归需要一个终止条件,在达到递归的终止条件时,需要有一个对应终止条件的程序处理方法。一般而言,在达到递归的终止条件时,对应的问题都是很容易解决的,可以快速的给出问题的解决方案。
递归中重复的逻辑提取,缩小问题规模
递归的本质上还是要将一个大的问题分解成各个逻辑相同的小问题,所以递归过程中一个重要的步骤就是提取递归中重复的逻辑规则,以便利用相同的处理方式进行处理。
按照以上递归的三要素,递归程序的一般处理可以总结成下面的伪代码:
recursion(big_problem){
if (end_condition){ //满足递归的终止条件
solve_end_condition; //处理终止条件下的逻辑
end; //递归结束
}else {
recursion(small_problem); //递归中重复的逻辑提取,缩小问题规模
}
}
2、斐波那契数列
(1)什么是斐波拉契数列?
斐波那契数列(Fibonacci sequence),也称之为黄金分割数列,由意大利数学家列昂纳多?斐波那契(Leonardo Fibonacci)提出。斐波那契数列指的是这样的一个数列:1、1、2、3、5、8、13、21、34、……,这个数列从第 3 项开始,每一项都等于前面两项之和。在数学上,斐波那契数列可以被递推的方法定义如下:
F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
斐波那契数列是数学上面一个经典的例子,并且在日常生活中有很多应用,他还与黄金分割有着密不可分的联系,而且当 n 趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割值 0.618。
(2)用递归方法求解斐波那契数列
利用递归的思想去求解斐波那契数列,当给出一个斐波那契中第几项的数字,然后求解出对应的斐波那契数值。
- 斐波那契数列的递归重复逻辑提取 ->?F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
- 斐波那契数列的递归终止条件 ->?F(1),F(2)?
- 斐波那契数列递归终止时候的处理方法 ->?F(1)=1,F(2)=1
使用 Java 代码来实现对斐波那契数列的计算:
/**
* @author swadian
* @date 2022/5/8
* @Version 1.0
* @describetion
* 斐波那契数列(Fibonacci sequence)
*/
public class FibonacciSequence {
/**
* 斐波那契数列指的是这样的一个数列:1、1、2、3、5、8、13、21、34、……,
* 这个数列从第 3 项开始,每一项都等于前面两项之和。
* 在数学上,斐波那契数列可以被递推的方法定义如下:
* F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
*/
public static void main(String[] args) {
System.out.println(fibonacci(9));
}
// 斐波那契数列数列的计算
public static int fibonacci(int n){
// 如果是终止条件,按照要求返回终止条件对应结果
if(n == 1 || n == 2){
return 1;
}
// 非终止条件,按照要求把大的问题拆分成小问题,调用自身函数递归处理
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
|