我已經寫了一個簡單的腳本,使用遞歸方法 - 歐幾里德算法來尋找最大公約數(GCD)和最小公倍數(LCM)。變量在遞歸JavaScript函數中變得未定義?
不幸的是,如果需要在多個步驟中執行此操作,則從該函數返回的相關變量變得未定義。我試着在一個帶有斷點的調試器中跟着它,它似乎完全按照遞歸進行,並且適當地返回到原始函數,但是它在函數的末尾神祕地消失了,即使它要返回?
不知道爲什麼會發生這種情況,或者我可以做些什麼來解決它。我的代碼如下:
function GCD(a, b) {
if (a % b == 0) {
return b;
}
else {
GCD(b, (a % b));
}
}
function LCM (a, b) {
return (a*b)/GCD(a, b);
}
function makeDM (a, b) {
return (GCD(a, b) + " " + LCM(a, b));
}
因此,如果您使用的是& b,如60,20,它會給20的正確答案和60.不過,如果您使用的數字,如20,60或126,這35悲慘地失敗了。
我貼你的代碼嘗試在http://ideone.com/,和它給我的警告第2行:使用'==='與0進行比較。 –
'GCD'中的一條路徑中沒有'return'。這很腥。 – Mat
這是你要做的 - > [** FIDDLE **](http://jsfiddle.net/wEv8Y/)?? – adeneo