遞迴呼叫與時間複雜度的學習總結
阿新 • • 發佈:2018-11-27
今天主要學習了兩個知識點。分別是遞迴呼叫和時間複雜度。重點是時間複雜度,比較複雜 。
1. 遞迴函式
1.1題目1:
一共5個人,一個比一個大2歲,最後一個10歲,問第一個多少歲? 首先用迴圈形式來寫函式,如下:int Age1(int n)//O(n)
{
int tmp = 10;
for(int i=1;i<n;i++)
{
tmp += 2;
}
return tmp;
}
而用遞迴函式如下:
int Age(int n) //O(n) { int tmp; if(n == 1)//邊界條件 { tmp = 10; } else { tmp = Age(n-1) + 2; } return tmp; }
但是遞迴函式的時間複雜度是比迴圈大的。
2.時間複雜度
如下一段程式:bool Fun(int n)
{
int i=2;
while((n%i)!=0 && i*1.0<sqrt(n))
{
i++;
}
if(i*1.0>sqrt(n))
return true;
else
return false;
}
現在問:1.這段程式實現什麼功能? 2.時間複雜度是多少?
答:1.判斷一個數是否為素數。
2.時間複雜度為sqrt(n)。