簡體   English   中英

我如何向第三方解釋最后一行

[英]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 或負數。

當傳遞負值時,它返回絕對值而不是確定奇數或偶數。

  • 在第一次迭代 -> n = 8 中,再次調用函數。
  • 在下一次迭代中 -> n = 6 即 (8-2),再次調用函數。
  • 在下一次迭代中 -> n = 4 即(6-2),再次調用函數。
  • 在下一次迭代中 -> n = 2 即(4-2),再次調用函數。
  • 在下一次迭代中 -> n = 0 即 (2-2),函數停止並返回 true。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM