[英]How do i explain the last line to a third party
關於這段代碼,我發現很難向第三方解釋。 當遞歸調用我們的函數時,從 n 中減去 2 背后的邏輯是什么?
function is_even(n) {
if (n<0) {
return Math.abs(n)
}
if (n=== 0) {
return true;
} else if (n === 1) {
return false;
} else {
return is_even(num - 2);
}
}
console.log(is_even(8));
所以這里的邏輯是,你基本上可以通過從中減去 2 直到它是 0 或 1 來判斷某個東西是奇數還是偶數。
你減去 2,因為如果你再減去任何東西,你可能會超調並最終得到一個負數。 通過減去 2,無論您從什么數字開始,您總是會得到 1 或 0。
如果你從 9 點開始
is_even(9)
9 - 2 = 7 | is_even(7)
7 - 2 = 5 | is_even(5)
5 - 2 = 3 | is_even(3)
3 - 2 = 1 => 1 indicates it is odd and the function will return
也許寫出一些像上面這樣的例子是向第三方解釋的好方法。
我認為您的 is_even 函數需要進行一些調整才能按預期工作:
function is_even(n) {
if (n < 0) {
n = Math.abs(n)
} if (n === 0) {
return true;
} else if (n === 1) {
return false;
}
else {
return is_even(n - 2);
}
}
該函數只檢查兩件事,如果是 0 則返回 True,如果是 1 則返回 False。
如果您是大於 0 或 1 的任何值,例如 2,3,4,5,6,7,8,...
else 語句的遞歸性質意味着:您始終可以將任何正數減去 2 次足夠的次數,使其變為 0 或 1。
這與將任何數字除以 2 的邏輯相同,余數總是 0 或 1,如果是 0,則該數字是偶數,如果是 1,則該數字是奇數。
你一直減 2 直到 n 是 1 或 0。如果它是 0,它是偶數,如果它是 1,它是奇數。 通過減去 2,您幾乎可以找到 n / 2 的余數。
function is_even(n) {
if(n<0){
return Math.abs(n)
}
if (n=== 0) {
return true;
}
else if (n === 1) {
return false;
}
else {
return is_even(n - 2);
}
}
console.log(is_even(8));
首先,該行應該是:
return is_even(n - 2);
代替
return is_even(num - 2);
來解釋一下:
給定一個數 n,該函數不斷從該數中減去 2,直到余數為負數、0 或 1。如果該數為奇數,則在隨后減去 2 時將返回 1。如果是偶數,則余數將為 0。如果數字小於 2,則余數將為負。 再次調用該函數的要點是繼續以遞歸方式減去 2,直到最終值為 0,1 或負數。
當傳遞負值時,它返回絕對值而不是確定奇數或偶數。
is_num 是一個遞歸函數,一個在執行過程中調用自身的函數。 現在當你寫“return is_even(num - 2);” 那么您發送的參數比原始值 num 小 2 個單位。 return is_even(num - 2);... is_even 將再次被調用,但參數 n 的值將小 2 個單位。
n 的值將繼續減少並且遞歸將繼續進行,直到返回某些內容,並且該返回值將在首先調用它的行中接收。
有關更多信息,您可以參考此鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.