这是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 )。