2016-12-17 88 views
-1

所以我剛開始自己​​研究Big O符號。我認爲我已經理解了基本知識,直到我寫了一個函數來檢查素數並試圖找出它的時間複雜度。代碼如下:我的代碼的時間複雜度是多少?

function isPrime(num){ 
    if (num === 1 || num%1 !== 0){ //Checks if num is 1 or decimal 
     return false; 
    } 
    else{ 
     for (var i = 2; i < num; i++) { 
      if (num%i === 0 && i!== 1){ //Checks if any numbers from 2 to are divisible by num 
       return false 
      } 
     } 
    } 
    return true; 
} 

console.log(isPrime(6)); 

讓我困惑的第一件事情是if語句中的多個條件是否有任何區別,或者只計算一次?然後通知我有三個返回語句。這是否意味着我必須包含最後一行代碼,我將一個數字傳遞給該函數以評估其時間複雜性?或者我可以做到沒有通過價值,並計算不同的情況?

+1

讓您的標題實際上描述您的問題或問題。 – csmckelvey

+0

@takendarkk感謝您指出。這是我第一次發帖,我忘了編輯我的選秀權。希望這更清楚。 –

回答

0
function isPrime(n){ 
    if (n === 1 || n%1 !== 0){ //Checks if num is 1 or decimal 
     return false; 
    } 
    for (var i = 2; i < n; i++) { 
     if (n%i === 0){ 
      return false 
     } 
    } 
    return true; 
} 

我已經取得了一些小的重構,它不改變的複雜性,而且使代碼更易讀與大O掙扎。

所以對於n > 1,N:orime,操作數是:

enter image description here

所以你的算法的複雜度O(n)

+0

這沒有考慮到'%'操作的時間複雜度 – Shai

相關問題