時(shí)間復(fù)雜度怎么計(jì)算 遞歸算法的時(shí)間復(fù)雜度計(jì)算問題?
遞歸算法的時(shí)間復(fù)雜度計(jì)算問題?遞歸算法的時(shí)間復(fù)雜度在算法中,當(dāng)一個(gè)算法包含遞歸調(diào)用時(shí),其時(shí)間復(fù)雜度的分析將轉(zhuǎn)化為遞歸方程的求解,常用的方法有以下四種:1。代換法的基本步驟是推測(cè)遞推方程的顯式解,然后用
遞歸算法的時(shí)間復(fù)雜度計(jì)算問題?
遞歸算法的時(shí)間復(fù)雜度在算法中,當(dāng)一個(gè)算法包含遞歸調(diào)用時(shí),其時(shí)間復(fù)雜度的分析將轉(zhuǎn)化為遞歸方程的求解,常用的方法有以下四種:
1。代換法的基本步驟是推測(cè)遞推方程的顯式解,然后用數(shù)學(xué)歸納法驗(yàn)證解是否合理。
2. 迭代法這種方法是針對(duì)“t(n)=at(n/b)f(n)”形式的遞推方程。該遞推方程是分治法的時(shí)間復(fù)雜度所滿足的遞推關(guān)系。也就是說,將n尺度問題分解為n/B尺度的子問題,通過遞歸求解,然后綜合子問題的解得到原問題的解。一些遞推方程可以看作是差分方程。通過求解差分方程可以求解遞推方程,進(jìn)而估計(jì)解的漸近階。遞歸編程是編程中常用的一種方法,它可以解決所有的遞歸屬性問題,而且是有效的。但是遞歸程序的效率相對(duì)較低,時(shí)間和空間都比非遞歸程序昂貴。如果在程序中消除遞歸調(diào)用,可以大大節(jié)省其運(yùn)行時(shí)間
斐波那契數(shù)列
無限數(shù)列1,1,2,3,5,8,13,21,34,55,。。。稱為斐波那契數(shù)列。它可以遞歸地定義為
1 N=0
f(N)=1 N=1
f(N-1)f(N-2)N>1
第N個(gè)Fibonacci數(shù)可以遞歸地計(jì)算如下:
int Fibonacci(INTN)
{
if(N
returnfibonacci(N-1)Fibonacci(N-2)]}
1 t(N-1)t(N-2)N>1
TN 0 N
時(shí)間復(fù)雜度為指數(shù)時(shí)間o(KN)
非遞歸計(jì)算如下:
int Fibonacci(int n)
{
if(n)]else{
int a=b=1
for(int i=0I
求解斐波那契數(shù)列的時(shí)間復(fù)雜度,分別用遞歸和非遞歸方法?
遞歸求n的階乘將遞歸n次,每次遞歸的內(nèi)部計(jì)算時(shí)間是常數(shù),所以O(shè)(n)
由遞歸方式求的N的階乘(即N,),時(shí)間復(fù)雜度是多少?
求n!的時(shí)間復(fù)雜度(只計(jì)算一下下面程序的就好)?
。讓我分別談?wù)勥@些方法
雖然它們也是遞歸的,但是有不同的編寫方法。例如,有兩種編寫方法
遞歸方法更直接。通過數(shù)組FIB[n]=FIB[n-1]FIB[n-2],直接遞歸方法是可以的。
可以通過以下公式直接求解,但缺點(diǎn)是可能會(huì)失去精度。
時(shí)間復(fù)雜度為O(log(n))。