网站开发公司名称,在线爱情动做网站,企业app有哪些,中国网站建设市场分析报告Java 递归计算斐波那契数列指定位置上的数字 一、原理二、代码实现三、运行结果 一、原理
斐波那契数列#xff08;Fibonacci sequence#xff09;#xff0c;又称黄金分割数列#xff0c;因数学家莱昂纳多斐波那契#xff08;Leonardo Fibonacci#xff09;以兔子繁殖为… Java 递归计算斐波那契数列指定位置上的数字 一、原理二、代码实现三、运行结果 一、原理
斐波那契数列Fibonacci sequence又称黄金分割数列因数学家莱昂纳多·斐波那契Leonardo Fibonacci以兔子繁殖为例子而引入故又称“兔子数列”其数值为1、1、2、3、5、8、13、21、34……
在数学上这一数列以如下递推的方法定义F(0)1F(1)1, F(n)F(n - 1)F(n - 2)n ≥ 2n ∈ N*。
二、代码实现
要计算第 n 个斐波那契数列的数字我们可以使用以下递归函数
public class MyClass {public static void main(String[] args){int n 10;System.out.println(斐波那契数列第 n 个数为 Fibonacci(n));}//递归 n代表第几个数public static int Fibonacci(int n) {//前两个数为 1//第三个数及后面的数为前面两数之和//如果输入的 n 不合法将返回 -1if (n 1 || n 2) {return 1;} else if (n 2) {return Fibonacci(n - 1) Fibonacci(n - 2);} else {return -1;}}}时间复杂度
最好情况下当 n 等于 1 或 2 时直接返回 1时间复杂度为 O(1)。最坏情况下当 n 大于 2 时需要递归调用 Fibonacci() 函数计算前两个数的和时间复杂度为 O(2^n)。因为每次递归调用会产生两个子问题每个子问题又会产生两个更小的子问题以此类推直到递归到 n 等于 1 或 2。平均情况下时间复杂度也是 O(2^n)因为每个数都需要通过递归调用计算得到。
空间复杂度
由于递归调用会在堆栈中保存每次调用的局部变量和返回地址所以空间复杂度取决于递归的深度。在最坏情况下递归深度为 n所以空间复杂度为 O(n)。
综上所述该递归实现的斐波那契数列函数的时间复杂度为指数级的 O(2^n)空间复杂度为线性的 O(n)。由于指数级的时间复杂度在计算较大的斐波那契数时递归实现会变得非常慢。
三、运行结果
斐波那契数列第 10 个数为 55