[英]Finding the greatest prime factor of an integer in Javascript
我正在嘗試編寫一個簡單的程序來找到 JavaScript 中 integer 的最大素數。 我為此編寫的代碼如下:
let ans;
function factor(target, half) {
for (let i = 2; i < half; i++) {
if (target % i == 0) {
ans = target / i;
factor(ans, ans / 2);
}
}
}
factor(30, 15);
console.log(ans);
現在,這段代碼是否是解決問題的有效解決方案,或者它是否完全有效,這超出了我的問題:當我遵循在factor
function 的每一行設置的斷點時,我看到在i = 2
之后, target = 5
、 half = 2.5
和ans = 5
,target 和 half 的值分別跳回15
和7.5
。 但是,我沒有看到我的代碼中的哪些值被告知要更改。
您正在遞歸地調用 function ,並且每次調用function 都會獲得自己的target
、 half
和i
變量。 在第一次調用factor
時, target
是30
, half
是15
。 然后你用 arguments 15
和7.5
再次調用它; 對factor
的內部調用得到它自己的target
( 15
) 和half
( 7.5
),但外部調用仍然有它的副本 ( 30
) 和 ( 15
)。 當您再次遞歸調用factor
時,這種情況會繼續,創建第三組,等等。當您退出最里面的調用時,它的變量會消失,您會看到調用它的調用的變量。
用一個更簡單的例子可能會更清楚:
function countdown(value, indent) { var twice = value * 2; console.log(indent + "[before] value = " + value + ", twice = " + twice); if (value > 0) { countdown(value - 1, indent + " "); } console.log(indent + "[after] value = " + value + ", twice = " + twice); } countdown(3, "");
.as-console-wrapper { max-height: 100%;important; }
其 output 為:
[before] value = 3, twice = 6 [before] value = 2, twice = 4 [before] value = 1, twice = 2 [before] value = 0, twice = 0 [after] value = 0, twice = 0 [after] value = 1, twice = 2 [after] value = 2, twice = 4 [after] value = 3, twice = 6
如您所見,外部調用中value
和twice
的值不會因內部調用而改變。 每個調用都有自己的一組變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.