2016-01-02 20 views
1

我在編碼階乘n時正在做一個基本的問題!有關改進我的代碼(JavaScript)中(負)因數的任何建議?

function factorialize(num) { 
    if (num < 0) { 
return undefined; 
    } else if (num === 0) { 
    return 1; 
    } 
    else { 
    return num * factorialize(num - 1); 
    } 
} 

網站我是從接受了這個解決方案的學習,但他們只是在測試的非負整數,即對ň≥0,而不是負整數。

我很好奇如何計算負因子(-n)!。許多網頁都說它沒有定義,但我發現有兩個說它可以被定義。

我得到的要點是:

| N | = |(-n)!|

它們的絕對值是相同的,但負因子變化的跡象。

例子:

4! =(-4)! = 24

5! = 120但是(-5)! = -120

,我從兩個鏈接的網頁收集其計算公式爲:

(-N)! = | n |! *(-1)^ n

這反映了我的代碼。從測試案例來看,我認爲我已經確定了它。我只想問問是否有更好的編碼方式。來自here 的人指出,使用遞歸是內存效率低下的。

function factorialize(num) { 
if (num === 0) { 
    return 1; 
    } else if (num > 0) { 
    return num * factorialize(num - 1); 
    } else { 
    return Math.pow(-1, num) * Math.abs(num) * factorialize(Math.abs(num) - 1); 
    } 
    } 

// test cases below 
    console.log(factorialize(-1)); // -1 
    console.log(factorialize(1)); // 1 
    console.log(factorialize(0)); // 1 
    console.log(factorialize(-2)); // 2 
    console.log(factorialize(2)); // 2 
    console.log(factorialize(-3)); // -6 
    console.log(factorialize(3)); // 6 
    console.log(factorialize(-4)); // 24 
    console.log(factorialize(4)); // 24 
    console.log(factorialize(-5)); // -120 
    console.log(factorialize(5)); // 120 
+0

我覺得你的問題是更切合主題,以[CR](http://codereview.stackexchange.com/)比SO – hindmost

+0

@天誅地滅,感謝小費 – elp1987

+0

如果您決定到那裏張貼,注意你的問題可以使用一些工作。在你明確表達你想要做的事情之前,我必須閱讀你的問題3次。 – Mast

回答

1

你也可以做到這一點使用迭代(通常是可以遞歸來完成,也可以反覆做的一切)。也沒有必要提高你的號碼的權力-1。如果你只是檢查它是奇怪的還是偶爾的,它會更有效率。

function factorialize(n){ 
    var absNum = Math.abs(n); 
    var i = 1; 
    var factorial = 1; 
    while(i <= absNum){ 
    factorial *= i; 
    i += 1; 
    } 
    if(absNum % 2 === 1 && n < 0){ 
    return -factorial 
    } 
    return factorial; 
} 
+0

除了缺少分號,這是一個好主意,隊友! – elp1987

相關問題