首页 > 编程知识 正文

递归求斐波那契数列,斐波那契数列两种算法的时间复杂度

时间:2023-05-04 07:34:14 阅读:140310 作者:576

这是2018年王道数据结构研究生复习指导的第一章思考拓展的主题。

斐波那契数列简介:

斐波那契数列也称为黄金分割数列,0、1、1、2、3、5、8、13、21、34、……数学上斐波那契数列被递归地定义,因此美国数学学会从1963年开始称为《斐波纳契数列季刊》

具体主题:

求解斐波那契数列的F(N )有两种常用的算法:递归算法和非递归算法。 试着分析一下这两种算法的时间复杂性。

1 .递归算法

1 #包含

2使用命名空间TD; 3

4longFibonacci(intn ) 5if ) n==06 return 0; 7elseif(n==1)8 return 1; 9错误

10返回光纤(n-1 )光纤(n-2 ); 11 ) 12

13 int main ((14 cout ' enteranintegernumber : ' n; 17coutFibonacci(n ) )。

时间复杂性分析:

要求解f(n ),必须先计算f(n-1 )和f ) n-2 ),再计算f ) n-1 )和f ) n-2 ),另外还必须先计算f ) n-3 )和f ) n-4 )。 这样,f(1)和f(1) )必须先计算,对f(n-1 )和f(n-1 )的结果进行逆运算,其中f(1 )计算了大量的重复值,导致在时间上浪费,算法的时间复杂

2 .非递归算法

1 #包含

2使用命名空间TD; 3

4longFibonacci(intn ) 5if (n=2) 6返回1; 7 else{8 long num1=1; 9 long num2=1; 10for(intI=2; i n - 1; I ) {11 num2=num1 num2; 12 num1=num2 -num1; 13 ) 14returnnum1num2; 十五)十六)十七

18输入主((19 cout ' enteranintegernumber : ' n ); 22计数光纤(n ) )。

时间复杂性分析:

n )从2 )开始计算,将f(n-1 )和f(n-1 )两个数相加求出结果,可以避免大量的重复计算。 其效率比递归算法快得多,算法的时间复杂度与n成正比。 这意味着算法的时间复杂度为o ) n )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。