1、在学习数据结构这门课程的过程中,发现酷我草莓数列的递归算法和非递归算法,以及时间复杂度分析是个小难点。 所以我会特别总结。
酷草莓数列的表示:
Fibonacci数列简介:
f(1)=1
f(2)=1
f(n )=f(n-1 ) f ) n-2 ) (n2 ) ) ) ) ) ) f(n )=f(n-1 ) f ) n-2 ) ) ) ) ) f ) n ) n ) n ) ) n ) n ) n ) n ) n ) n ) n ) n ) n ) n ) n ) n )
2,)1)酷苺数列递归算法思想的描述:利用递归思想,每次计算当前值时,引用前面两个值,一步一步递归,直到最开始使用f(1)和f(1)。
递归算法:
intrecursive_method(intn ) if ) n==1|||n==2) return1; ELSEreturnrecursive_method(n-1 ) recursive _ method (n-2 ); (2)递归算法的调用顺序的例子。
在回归呼叫中,fib(3)被计算了2次,fib(3)被计算了3次。 FIB(1)调用了5次,FIB(1)调用了3次。 所以,递归虽然效率低下,但具有代码简单容易理解的优点。
)3)递归算法的时间复杂度为o(2^ ) n/2 ) )=t ) n )=o )2^n )。 这个时间的复杂度参考具体的计算方法,http://BBS.pediy.com/showthread.PHP? t=123051。
3,)1)酷草莓的非递归算法
span style=' font-family : microsoftyahei;' intnon_recursive_method(intn ) {int p=1; int q=1; if(n==1||n==2)返回1; else{for(intI=3; i n; I ) {int tmp=p; //将第一个值p分配给tmpp=q;//把第2个值q分配给p,以后每次代入把得到的最新的f(n )分配给p。 从后面的句子中可以看出,q被存储为最新的f ) n ) q=tmp q。 }return q; }/span(2)酷的草莓非递归算法的时间复杂度为o(n )